常见问题 (FAQ)
一般问题
Arthas 是什么?
Arthas 是一个开源的端到端加密实时聊天应用。用户可以创建临时聊天房间,通过分享密钥邀请伙伴加入,所有消息在客户端加密后传输,服务器仅做密文中转。
为什么叫 Arthas?
项目名称来源于魔兽世界中的角色阿尔萨斯(Arthas),象征着强大的守护力量 — 守护你的通信隐私。
Arthas 和 Signal/Telegram 有什么区别?
| 特性 | Arthas | Signal | Telegram |
|---|---|---|---|
| 需要注册 | ❌ | ✅ | ✅ |
| 消息持久化 | ❌ | ✅ | ✅ |
| 端到端加密 | ✅ | ✅ | 可选 |
| 前向保密 | ❌ | ✅ | ✅ |
| 开源 | ✅ | ✅ | 部分 |
| 自托管 | ✅ | 困难 | ❌ |
Arthas 适合临时、匿名、一次性的加密通信场景。
安全问题
服务器能看到我的消息吗?
不能。 消息在你的浏览器中使用 AES-256-GCM 加密后才发送。服务器只看到密文(乱码),没有密钥无法解密。
密钥存储在哪里?
密钥仅存在于浏览器标签页的内存中(Zustand store)。关闭标签页或刷新页面,密钥即丢失。服务器从不接触密钥。
分享码泄露了怎么办?
分享码包含房间 ID 和加密密钥。如果泄露,任何人都可以加入房间并解密消息。建议:
- 通过安全渠道分享(面对面、加密 IM)
- 敏感对话后所有人离开房间(房间销毁)
- 不要在公开场合发布分享码
消息会被保存吗?
不会。 服务器不存储任何消息。消息只存在于:
- 发送方浏览器内存(最多 200 条)
- 接收方浏览器内存(最多 200 条)
- 关闭页面后全部消失
断线期间的消息能恢复吗?
不能。 由于无持久化设计,断线期间的消息不可恢复。重连后会显示提示”您断线期间可能错过了消息”。
使用问题
如何创建房间?
- 打开 Arthas 网页
- 输入昵称(1-20 字符)
- 点击”创建房间”
- 复制生成的分享码
如何加入房间?
- 获取朋友分享的分享码
- 打开 Arthas 网页
- 输入昵称和分享码
- 点击”加入”
分享码是什么格式?
格式为 {roomId}:{base64url(roomKey)},总长 65 字符。例如:
V1StGXR8_Z5jdHi6B-myT:k7_9xPqR2mNvLwE3hJfKdA1234567890abcdefghijk房间最多能有多少人?
默认最多 50 人。超出后新加入者会收到”房间已满”提示。
消息有长度限制吗?
Web 客户端单条消息最多 500 字符,AI Agent 通道(OpenClaw)支持最多 4000 字符/条(自动分割)。支持 UTF-8 全字符集(包括 emoji)。
发送消息有频率限制吗?
是的,每 10 秒最多发送 10 条消息。超出后会提示”发送过快,请稍后再试”。
刷新页面后还能继续聊天吗?
不能。 刷新页面等于离开房间(密钥丢失)。需要重新使用分享码加入。
技术问题
支持哪些浏览器?
- Chrome 90+
- Firefox 90+
- Safari 15+
- Edge 90+
需要支持 Web Crypto API 的现代浏览器。不支持 IE。
为什么使用 MessagePack 而不是 JSON?
MessagePack 是二进制序列化格式,比 JSON 节省 30-50% 带宽,编解码速度更快。对于实时通信场景,这意味着更低的延迟和更少的流量消耗。
为什么不使用 Signal Protocol / Double Ratchet?
Arthas 的设计目标是临时聊天,不需要消息持久化和前向保密。AES-256-GCM 对称加密足够安全,且实现简单。未来可能升级到 Double Ratchet。
后端为什么选择 Go?
- goroutine 天然适合高并发 WebSocket 连接
- 编译为单一二进制,部署简单
- 内存占用低
- 标准库强大
前端为什么不用 Next.js?
Arthas 是纯客户端应用,不需要 SSR。Vite + React 更轻量,构建更快。
部署问题
如何自己部署?
参考 自托管部署指南,支持三种方案:
- 单二进制(零依赖,推荐开发/内网使用)
- Docker 单容器(一条命令快速部署)
- Docker Compose + Caddy(公网自动 HTTPS)
部署需要数据库吗?
不需要。 Arthas 是纯内存应用,不依赖任何数据库。
服务器重启后房间还在吗?
不在。 服务器重启等于所有房间销毁。这是设计决策,不是 Bug。
需要多少服务器资源?
- 内存:~50MB 基础 + 10KB/连接
- CPU:极低(只做消息转发)
- 磁盘:~20MB(Go 二进制)
100 并发连接约需 51MB 内存。