开源私有聊天室and构建和部署

前言

这是一个极简、可随手放在任意 PHP 环境中运行的匿名聊天室” 的想法。与其说是造轮子,不如说是一次针对“文件驱动 + 前后端解耦 + UI 微交互”的实践。

背景

在某些时候,我们会遇到一个安全,私有的无需注册、即开即用的沟通工具的情况。而市面上现成解决方案要么功能过重,要么受限于部署条件。我希望:

  • 零数据库依赖——哪怕只有 php -S 也能跑。
  • 前端零依赖——纯 JS + 少量 CSS,实现自适应深色主题。
  • 支持阅后即焚、自毁计时等“轻隐私”特性。

技术栈

本项目保持极简:

  • 后端: PHP(无框架),以 json 文件持久化消息与在线状态。
  • 前端: HTML + CSS + 原生 JavaScript,轮询 + 差量渲染确保实时体验。
  • 部署: 任意支持 PHP 7+ 的共享主机 / 轻量云服务器。

关键特性

当前版本已实现以下功能:

  • 匿名登录(昵称即身份,免注册)
  • 实时消息刷新
  • 在线用户统计与列表
  • 已读计数
  • 自毁消息:定时删除 & 阅后即焚
  • 深色响应式 UI

设计与实现

1. 文件存储而非数据库

相比 MySQL,JSON 文件更轻量,也更易备份。结合 flock 锁避免写冲突;定时 cleanup_messages.php 清理过期数据。

2. 差量轮询 & DOM Targeting

为了减少带宽消耗,我在前端仅请求 最新时间戳 之后的消息;并利用 dataset 锚点,精准更新已读计数,避免整屏重绘。

3. 自毁逻辑

每条消息可携带两种 TTL:

  • expires_at:定时自毁
  • burn_after_read:阅后多少秒删除

后端在 send.php & read.php 中写入 / 处理,并由 cleanup_messages.php 做兜底清理。

开发里程碑

实现实时“已读”计数、区分系统消息及 UI 优化

完成自毁消息 UI,更新 README,并修复移动端横向滚动问题

部署与本地运行

  1. 克隆仓库:git clone https://github.com/zhuchenyu2008/Chatroom.git
  2. 赋权:chmod 666 messages.json online.json(仅开发环境,生产请收紧权限)
  3. 启动:php -S 0.0.0.0:8080,浏览器访问 http://localhost:8080/index.php (端口随意)

遇到的问题与解决方案

  • 并发写入冲突: 通过 flock 保证原子写;高并发场景计划引入 SQLite。
  • 移动端输入体验: 针对软键盘遮挡问题,动态调整 viewport 与滚动。
  • 消息跳动: 精准更新 DOM 节点而非重绘列表,配合 scrollIntoView() 平滑滚动。

未来计划

  • WebSocket / SSE 替换轮询
  • 可选 Docker 部署
  • 消息加密 & 简易“阅后留痕”追踪

最后

感谢你读到这里!如果这个项目对你有帮助,欢迎 Star 支持,或提 Issue/Pull Request 一起共建。

© 2025 zhuchenyu2008




已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注