一个 HTML 文件,就是一个聊天室——BeeChat 的极简哲学

没有服务器、没有数据库、没有后端代码。一个 HTML 文件丢上静态托管,聊天室就跑起来了。
听起来像天方夜谭?往下看。


那天,我受够了”脚手架”

想搭个聊天室。常规操作:

npx create-react-app → 300MB node_modules
npm install socket.io express mongoose bcrypt ...
写 WebSocket 服务 → 写路由 → 配数据库 → 写认证 → 部署服务器 → 配 Nginx → 配 SSL → 配域名

两个小时过去了,还没开始写聊天界面。

我突然想:能不能像个野蛮人一样,一个 HTML 文件扔上去就完事?

答案是:能。


魔法在哪里?

BeeChat 把服务端的活全部分派给了三样东西:

🧩 零件🎭 角色💰 费用
EMQX 公共 MQTT 代理消息中转站,替 WebSocket 服务端干活免费
浏览器 Canvas API图片压缩工厂,上传前自动瘦身 80%+免费
Web Crypto API管理密码 SHA-256 验证,在浏览器里完成免费

三个全免费、全网可用的公共设施,凑在一起,把服务端架空了。

架构图一句话说完:

用户A 浏览器 ──MQTT──→ 公共代理 ←──MQTT── 用户B 浏览器
                 ↑
            零行后端代码

这就是 BeeChat 的全部秘密。不是没有后端——是把后端的活外包给了互联网公共基础设施


你只需要一个文件

beechat/
└── index.html    ← 就这一个

丢到任何地方都能跑:

  • GitHub Pages → git push 即上线
  • Vercel / Netlify → 拖拽上传
  • 虚拟主机 → FTP 上传
  • 甚至本地双击打开(配合 python -m http.server

npm install、零环境变量、零数据库。


但功能一个不少

🗨️ 实时聊天

MQTT 的 pub/sub 模型天然适合聊天。消息发布到公共主题,所有订阅者毫秒级接收。WebSocket 长连接,比轮询省流量,比 SSE 双向。

🖼️ 图片压缩黑科技

上传图片前,Canvas API 在浏览器里完成压缩:

原始 5MB PNG → Canvas 缩放 (800px) → WebP quality 0.7 → 约 60KB

压缩率 98%+,肉眼几乎看不出区别。 压缩后的图片以 base64 嵌入 MQTT 消息体,不需要任何图床服务。

🛡️ 管理后台

点击右上角「管理」→ 输入密码 → 进入上帝视角:

  • 查看所有在线用户的 IP 地址
  • 追溯每条消息的 发送者 IP
  • 单条删除一键清空,操作实时同步到全体用户

密码用 SHA-256 哈希存在页面里,验证全程在浏览器完成,密码原文从不离开你的电脑。

👤 用户昵称系统

首次访问弹窗设昵称,localStorage 持久化。消息带上昵称标签,不再”谁发的?”一脸懵。

🌐 网络自适应

内置 6 个 MQTT 代理自动切换:

broker-cn.emqx.io  →  中国节点
broker.emqx.io     →  全球节点
test.mosquitto.org →  备用
broker.hivemq.com  →  再备用
...(WS/WSS 双协议)

3 个 CDN 加载 MQTT 库(jsdelivr → BootCDN → Staticfile),一个挂了自动换。

4 个 IP 服务获取客户端 IP(ipify → httpbin → ip.sb → 备用),全挂也能降级运行。

每个关键依赖都有 Plan B、C、D。BeeChat 对不稳定网络的容忍度,是传统架构难以企及的。


技术选型表

需求传统方案BeeChat 方案
实时通信Socket.IO + Node.js 服务MQTT 公共代理
消息存储MongoDB / RedisMQTT 消息链 + 客户端缓存
图片存储OSS / S3 / 本地磁盘Canvas 压缩 → base64
用户认证JWT + 数据库localStorage 昵称
管理员认证后端 sessionSHA-256 客户端比对
部署服务器 + 域名 + SSL静态文件托管

每一行都在问同一个问题:这件事能不能不在服务端做?


一个”叛逆”的对话

面试官:你们的聊天室后端用什么语言写的?
BeeChat:没有后端。
面试官:……那消息怎么同步?
BeeChat:MQTT 公共代理。
面试官:图片存哪?
BeeChat:base64 嵌在消息里。
面试官:管理员怎么认证?
BeeChat:浏览器本地 SHA-256。
面试官:…………你们在哪个服务器部署?
BeeChat:GitHub Pages。
面试官:😶

适合谁?

  • 🧑‍🎓 想学实时通信但不想配服务器的新手
  • 🚀 需要快速搭个内部聊天工具的团队
  • 🎨 追求极简部署的独立开发者
  • 🕵️ 想理解 MQTT / Canvas / Web Crypto 的好奇宝宝

不适合谁?

  • 需要消息持久化存储的生产环境(MQTT 代理不保证历史)
  • 需要端到端加密的场景(base64 图片可被中间代理读取)
  • 需要复杂权限管理的企业应用

这就是取舍。BeeChat 不追求大而全,追求的是用最小的复杂度,覆盖最多的真实需求


一分钟跑起来

# 1. 下载
git clone https://github.com/Remtg/beechat.git

# 2. 启动(任意静态服务器)
cd beechat
python -m http.server 3000

# 3. 打开浏览器
# http://localhost:3000
# 用手机连同一 WiFi 也能访问

修改管理密码:看 README


最后

这个项目的核心理念是:

不是所有应用都需要一个后端。公共基础设施已经足够好,好到你可以把服务端的职责外包给它们。

当 MQTT 代理替你转发消息、Canvas 替你压缩图片、Crypto API 替你验证密码——你剩下的工作,就是写一个漂亮的 HTML。

这就是 BeeChat。一个 HTML 文件,一个聊天室,一种态度。


⭐ Star on GitHub | 🔗 在线体验

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇