版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

WebSocket是最常见的用于服务端向客户端发起连接的手段。WebSocket由客户端发起,支持双向连接和会话保持。WebSocket从HTTP请求开始,通过握手协议升级成WebSocket通信。升级成WebSocket后,客户端和服务端就可以进行双向通信了。即使是在有防火墙的情况下,WebSocket也可以很好的工作,因为它和HTTP/HTTPS使用相同的端口,而这两个端口在服务器上一般开放的。由于WebSocket本身支持双向通信,所以客户端也不需要使用HTTP协议了,客户端和服务器都可以使用WebSocket协议进行通信。HTTPS使用相同的端口,而这两个端口在服务器上一般是开放的。由于WebSocket本身支持双向通信,所以客户端也不需要使用HTTP协议了,客户端和服务器都可以使用WebSocket协议进行通信。

总体设计

整个系统包含三部分:无状态服务,有状态服务,第三方服务。服务端和客户端之间的双向连接采用WebSocket实现,但是像其他功能,比如登录,注册,获取用户配置等还是可以使用传统HTTP基于请求/响应模型进行实现。

...

基于服务端负责以及地理位置等信息向客户端推荐最适合的服务器。Apache Zookeeper是一个很流行的开源服务发现工具。它负责注册所有的聊天服务器,以及基于预定义的规则从服务器中选出最合适的一个。

工作流程如下:

  1. 用户A尝试登录APP
  2. 负载均衡将请求发送给API服务器
  3. 认证成功后,服务发现找出最合适的聊天服务器,这里是服务器2,将该服务器的信息返回给用户A。
  4. 用户A通过WebSocket连接聊天服务器2。

消息流

搞清楚端到端情况下的消息流,这里讨论一对一消息流,消息多端同步,以及群聊。

一对一消息流

Image Added

流程如下:

  1. 用户A发送一条消息给聊天服务器1。
  2. 聊天服务器1从ID生成器中获取一个消息ID。
  3. 聊天服务器将消息发送给消息同步队列。
  4. 消息存储在键值服务器中。