喧喧技术架构实现方案
目标
喧喧即时通信解决方案目标有:
- 多平台支持:服务器支持任意系统平台部署,客户端支持在任意平台上使用;
- 交互体验:实现无延迟的聊天体验;
- 安全性:保证通信安全性,禁止第三方截获消息;
- 性能:支持大量用户同时在线使用;
- 可扩展性:采用通用技术,方便进行二次开发;
- 集成:易于与已有系统进行集成。
方案
喧喧即时通信解决方案包含三个部分:
- 客户端(xxc):提供最终用户使用的交互界面;
- 后端服务器(xxb):提供聊天数据存储以及供客户端使用的接口,以及喧喧服务器管理界面。
- XXD 服务器(xxd):作为中间守护服务器,提供文件上传下载管理、协调客户端与后端服务器通信。
客户端通过 Socket 连接到 XXD 服务器;XXD 服务器负责管理所有已连接的客户端,并且随时将客户端相关信息通过 HTTP 协议汇报给后端服务器;客户端并不直接与后端服务器通信,而且将消息发送给 XXD 服务器,XXD 服务器接收到客户端消息后立即将消息发送给后端服务器;后端服务器如果有消息要推送给客户端需要先发送给 XXD 服务器,然后 XXD 服务器将后端服务器的消息再推送给客户端。在以上三方直接存在 2 中通信协议:
- Socket:客户端与 XXD 服务器直接使用 Socket 协议连接(文件上传下载除外),可以实现实时通信,将用户聊天过程中的延迟降至最低;
- HTTP:XXD 服务器与后端服务器通过 HTTP 协议通信,HTTP 协议具有广泛的支持,并且使用简单,这样用户更容易将喧喧集成到自己的系统中。
通常情况下客户端、后端服务器和 XXD 服务器的关系如下:
一个 XXD 服务器还可以链接到多个后端服务器,这样可以实现集群部署:
技术实现
后端服务器实现
后端服务器采用 php + mysql 开发,使用 ZentaoPHP 作为开发框架,非常方便的进行二次开发。
XXD 服务器实现
XXD 服务器端采用 Go 语言实现。Go 语言具备高性能、支持高并发、易于学习使用,非常适合来开发中间守护服务器。
XXD 服务器使用到了 go-sqlite3 来实现服务器缓存功能。
客户端实现
客户端推荐采用 HTML/CSS/JS 实现,目前官方桌面客户端基于 Electron 开发。