tinode/chat
GitHub: tinode/chat
一个基于 Go 的开源即时消息平台,提供全栈解决方案以构建可扩展、抗追踪的去中心化聊天系统。
Stars: 13250 | Forks: 2047
# Tinode 即时消息服务器
即时消息全栈。后端使用纯 [Go](http://golang.org)(许可证 [GPL 3.0](http://www.gnu.org/licenses/gpl-3.0.en.html)),客户端支持 Android(Java)、iOS(Swift)和 Web(ReactJS),以及 [gRPC](https://grpc.io/) 客户端支持 C++、C#、Go、Java、Node、PHP、Python、Ruby、Objective-C 等(所有客户端均基于 [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) 许可)。传输层使用 JSON over WebSocket(也支持长轮询)或 [protobuf](https://developers.google.com/protocol-buffers/) 搭配 gRPC。
这是一款测试版软件:功能完整且稳定,但可能存在少量错误或缺失功能。请按照 [说明](INSTALL.md) 安装和运行,或使用以下云服务。阅读 [API 文档](docs/API.md)。
Tinode *不是* XMPP/Jabber。它与 XMPP *不兼容*。它是作为 XMPP 的替代品而设计的。表面上,它很像开源的 WhatsApp 或 Telegram。
## 为什么?
[XMPP](http://xmpp.org/) 的承诺是实现联邦即时消息:任何人都可以启动一个 IM 服务器,与世界上任何其他 XMPP 服务器交换消息。不幸的是,XMPP 并未兑现这一承诺。即时消息应用仍然是一堆互不兼容的“围墙花园”,类似于 20 世纪 90 年代末 AOL 对开放互联网的做法。
该项目的目标是实现 XMPP 的原始愿景:创建一个现代化的开放联邦即时消息平台,重点关注移动通信。次要目标是创建一个更难被追踪和屏蔽的去中心化即时消息平台。
一个明确的非目标:我们不是在构建另一个 Slack 替代品。
## 安装与运行
请参阅 [通用说明](./INSTALL.md) 或 [Docker 专用说明](./docker/README.md)。
## 获取支持
* 阅读 [API 文档](docs/API.md) 和 [常见问题解答](docs/faq.md)。阅读 [`tinode.conf`](./server/tinode.conf) 文件中的配置说明。
* 如需支持、一般性问题或讨论,请在 [https://groups.google.com/d/forum/tinode](https://groups.google.com/d/forum/tinode) 发布。
* 如遇错误或功能请求,请 [提交问题](https://github.com/tinode/chat/issues/new/choose)。
* 商业咨询请使用 https://tinode.co/contact。
## 帮助
## 公共服务
一个 [公共 Tinode 服务](https://web.tinode.co/) 可用。你可以像使用其他即时消息应用一样使用它。请注意,[沙盒](https://sandbox.tinode.co/) 中提供的演示账户在公共服务中不可用。你必须使用有效的电子邮件地址注册账户才能使用该服务。
### Web
TinodeWeb,一个单页 Web 应用,在 https://web.tinode.co/ 可用 ([源代码](https://github.com/tinode/webapp/))。请参见下面的截图。
### Android
[Tinode for Android](https://play.google.com/store/apps/details?id=co.tinode.tindroidx) 又称 Tindroid,稳定且功能完整 ([源代码](https://github.com/tinode/tindroid))。请参见下面的截图。也可提供 [调试 APK](https://github.com/tinode/tindroid/releases/latest) 以方便使用。
### iOS
[Tinode for iOS](https://apps.apple.com/us/app/tinode/id1483763538) 又称 Tinodios,稳定且功能完整 ([源代码](https://github.com/tinode/ios))。请参见下面的截图。
## 演示/沙盒
一个沙盒演示服务在 https://sandbox.tinode.co/ 可用。
使用以下账户登录:`alice`、`bob`、`carol`、`dave`、`frank`。密码为 `123`,例如 `alice` 的密码是 `alice123`。你可以通过在用户名前添加 `email:` 或 `tel:` 分别使用邮箱或电话发现其他用户。邮箱地址为 `@example.com`,例如 `alice@example.com`;电话号码范围为 `+17025550001` 到 `+17025550009`。
注册新账户时,系统会要求你提供电子邮件地址以发送验证代码。对于演示目的,你可以使用 `123456` 作为通用验证代码。你收到的电子邮件中的代码也有效。
### 沙盒说明
* 沙盒服务器会在每晚太平洋时间 3:15 重置(所有数据清除)。错误信息 `User not found or offline` 表示服务器在你连接期间已重置。如果在网页上看到,请重新加载并重新登录。在 Android 上,请退出并重新登录。如果数据库已更改,请删除应用后重新安装。
* 沙盒用户 `Tino` 是一个 [基础聊天机器人](./chatbot),会对任何消息回复 [随机引用](http://fortunes.cat-v.org/)。
* 通常情况下,注册新账户时需要提供电子邮件地址。服务器会向该地址发送包含验证代码的电子邮件,并可用于验证账户。为了便于测试,服务器也会接受 `123456` 作为验证代码。要禁用此选项,请从 `tinode.conf` 中删除 `"debug_response": "123456"`。
* 沙盒服务器配置为使用 [ACME](https://letsencrypt.org/) TLS [实现](https://godoc.org/golang.org/x/crypto/acme),并强制要求 [SNI](https://en.wikipedia.org/wiki/Server_Name_Indication)。如果无法连接,最可能的原因是 TLS 客户端缺少 SNI 支持。请使用其他客户端。
* 默认 Web 应用加载一个压缩后的 JavaScript 包和压缩后的 CSS。未压缩版本也可在 https://sandbox.tinode.co/index-dev.html 获取。
* [Docker 镜像](https://hub.docker.com/u/tinode/) 提供相同的演示环境。
* 欢迎你测试你的客户端软件、对其进行修改等,但请不要进行 DDoS 攻击。
## 功能
### 已支持
* 多个原生平台:
* [Android](https://github.com/tinode/tindroid/)(Java)
* [iOS](https://github.com/tinode/ios)(Swift)
* [Web](https://github.com/tinode/webapp/)(React.js)
* 可脚本化的 [命令行工具](tn-cli/)(Python)
* 用户功能:
* 一对一和群组消息。
* 视频和语音通话、语音消息。
* 支持无限数量只读订阅者的频道。
* 所有聊天在所有设备间同步。
* 细粒度的访问控制,支持多种操作的权限。
* 用户搜索/发现。
* 支持 Markdown 样式的消息富格式化:`*style* → **style****,支持内联图片、视频和文件附件。
* 表单和模板化响应,适合聊天机器人。
* 已验证/员工/不受信任账户标记。
* 留给自己便签、收藏(保存)消息。
* 消息状态通知:消息送达服务器、已接收和已读通知、正在输入通知。
* 联系人列表中最近消息的预览。
* 为人员、群组聊天自动生成在线状态通知。
* 转发和回复消息。
* 编辑已发送消息。
* 置顶聊天和消息。
* 可自定义消息背景(壁纸)。
* 浅色/深色/系统 UI 主题。
* 管理功能:
* 细粒度的访问控制,支持多种操作的权限。
* 支持自定义认证后端。
* 服务器端阻止不需要的通信。
* 匿名用户(适用于技术支持等聊天场景)。
* 插件系统以扩展功能,例如支持审核或聊天机器人。
* 可脚本化的 [命令行工具](tn-cli/) 用于服务器管理。
* 性能、可靠性与开发:
* 支持故障转移的分片集群。
* 使用本地文件系统或 Amazon S3 存储和带外传输大型对象(如图片或文档文件)(其他存储系统可通过 [媒体处理器](https://github.com/tinode/chat/blob/master/server/media/media.go#L21) 支持)。
* JSON 或 [protobuf 版本 3](https://developers.google.com/protocol-buffers/) 传输协议。
* 多种编程语言的绑定:
* JavaScript,无外部依赖。
* Java,依赖 [Jackson](https://github.com/FasterXML/jackson)、Java-Websocket](https://github.com/TooTallNate/Java-WebSocket)、[ICU4J](https://github.com/unicode-org/icu)。适用于 Android,但不依赖 Android SDK。
* Swift,无外部依赖。
* C/C++、C#、Go、Python、PHP、Ruby 等多种语言通过 [gRPC](https://grpc.io/docs/languages/)。
* 可选择的数据库后端。其他数据库可通过编写 [适配器](server/db/adapter.go) 添加。
* MySQL(以及 MariaDB、Percona,只要它们保持 SQL 和线协议兼容)
* PostgreSQL
* MongoDB
* [RethinkDB](http://rethinkdb.com/)。支持已弃用,将于 2027 年移除,除非其开发恢复。
### 计划中
* [联邦](https://en.wikipedia.org/wiki/Federation_(information_technology)。
* 位置和联系人共享。
* 附加文档、链接的预览。
* 录制视频消息。
* 视频/音频广播。
* 群组视频/音频通话。
* 附加音乐/音频(非语音消息)。
* 多种消息持久化级别(从严格持久化到“仅送达存储”再到纯临时消息)。
* 消息端到端加密,使用 [OTR](https://en.wikipedia.org/wiki/Off-the-Record_Messaging) 实现一对一消息,对群组消息使用未定方法。
* 消息全文搜索。
### 翻译
所有客户端软件均支持 [国际化](docs/translations.md)。提供以下翻译:
| 语言 | 服务器 | Web 应用 | Android | iOS |
| --- | :---: | :---: | :---: | :---: |
| English | ✓ | ✓ | ✓ | ✓ |
| Arabic | | ✓ | | |
| 简体中文 | ✓ | ✓ | ✓ | ✓ |
| 繁体中文 | ✓ | ✓ | ✓ | ✓ |
| French | ✓ | ✓ | ✓ | |
| German | | ✓ | ✓ | |
| Hindi | | | ✓ | |
| Italian | | ✓ | ✓ | ✓ |
| Korean | | ✓ | ✓ | |
| Portuguese | ✓ | | ✓ | |
| Romanian | | ✓ | ✓ | |
| Russian | ✓ | ✓ | ✓ | ✓ |
| Spanish | ✓ | ✓ | ✓ | ✓ |
| Thai | | ✓ | | |
| Ukrainian | ✓ | ✓ | ✓ | ✓ |
| Vietnamese | ✓ | ✓ | | |
## 第三方项目
### 项目
* [Arango DB 适配器](https://github.com/gfxlabs/chat/tree/master/server/db/arango)(已过时)
* [DynamoDB 适配器](https://github.com/riandyrn/chat/tree/master/server/db/dynamodb)(已过时)
### 许可证
* 演示头像及其他部分图形来自 https://www.pexels.com/(采用 [CC0 许可](https://www.pexels.com/photo-license/))和 https://pixabay.com/(采用其[许可](https://pixabay.com/service/license/))。
* Web 和 Android 背景图案来自 http://subtlepatterns.com/(采用 [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/) 许可)。
* Android 图标来自 https://material.io/tools/icons/(采用 [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.html) 许可)。
## 截图
### [Android](https://github.com/tinode/tindroid/)
标签:Android, API, DSL, EVTX分析, Go, gRPC, iOS, JS文件枚举, Protobuf, Python工具, ReactJS, Ruby工具, Swift, Web, WebSocket, XMPP替代, 云服务, 依赖分析, 全栈, 即时通讯, 后端, 开源, 数据可视化, 日志审计, 测试用例, 移动通讯, 联邦即时通讯, 长轮询