推送系统功能设计

1.架构设计图

推送系统功能设计

  • push_server_dispatch应用,解决了当我们的推送服务器集群处理后,客户端无法知道连接那个服务器的问题。不采用nginx负载均衡,是因为这属于中心负载均衡,当用户量大的时候,处理起来并不好。
  • 推送系统说到底,还是客户端到服务端的数据流转问题。

2.短链接与长连接

  • 短链接:请求/响应之后,关闭已建立的TCP连接,下次请求再建立一次连接
  • 长连接:请求/响应之后,不关闭TCP连接,多次请求复用同一个连接
  • 为了避免频繁创建连接/释放连接带来的性能损耗,以及保证消息获取的实时性,采用长连接的形式。

2.1粘包与拆包

推送系统功能设计

  • 发送方发送数据后,会放到缓冲区中

  • 粘包:短时间内,多次发送的数据都比较少时,会累积到缓冲区中,当满足nagle算法时,才会发送,这时候就会发生粘包情况,即将多次请求的数据一并发送。

  • 拆包:即一次发送的数据量太大时,会分成两次发送给接收方。

  • netty中的解决粘包与拆包:在netty职责链中新增一个handler节点,专门用来对数据进行解析或者编解码(netty中有提供编解码的类,我们可以使用现成的)。

3.使用websocket

WebSocket协议是基于TCP的一种新型的网络协议

  • 它的出现实现了浏览器与服务器全双工通信:允许服务器主动发送消息给客户端。

  • 处于应用层的协议,TCP三次握手之后,还需要校验,看是否支持此协议。

后续会不断进行补充