...
WebSocket是最常见的用于服务端向客户端发起连接的手段。WebSocket由客户端发起,支持双向连接和会话保持。WebSocket从HTTP请求开始,通过握手协议升级成WebSocket通信。升级成WebSocket后,客户端和服务端就可以进行双向通信了。即使是在有防火墙的情况下,WebSocket也可以很好的工作,因为它和HTTP/HTTPS使用相同的端口,而这两个端口在服务器上一般开放的。由于WebSocket本身支持双向通信,所以客户端也不需要使用HTTP协议了,客户端和服务器都可以使用WebSocket协议进行通信。HTTPS使用相同的端口,而这两个端口在服务器上一般是开放的。由于WebSocket本身支持双向通信,所以客户端也不需要使用HTTP协议了,客户端和服务器都可以使用WebSocket协议进行通信。
总体设计
整个系统包含三部分:无状态服务,有状态服务,第三方服务。服务端和客户端之间的双向连接采用WebSocket实现,但是像其他功能,比如登录,注册,获取用户配置等还是可以使用传统HTTP基于请求/响应模型进行实现。
...
基于服务端负责以及地理位置等信息向客户端推荐最适合的服务器。Apache Zookeeper是一个很流行的开源服务发现工具。它负责注册所有的聊天服务器,以及基于预定义的规则从服务器中选出最合适的一个。
工作流程如下:
- 用户A尝试登录APP
- 负载均衡将请求发送给API服务器
- 认证成功后,服务发现找出最合适的聊天服务器,这里是服务器2,将该服务器的信息返回给用户A。
- 用户A通过WebSocket连接聊天服务器2。
消息流
搞清楚端到端情况下的消息流,这里讨论一对一消息流,消息多端同步,以及群聊。
一对一消息流
流程如下:
- 用户A发送一条消息给聊天服务器1。
- 聊天服务器1从ID生成器中获取一个消息ID。
- 聊天服务器将消息发送给消息同步队列。
- 消息存储在键值服务器中。