推送系统功能设计
1.架构设计图
- push_server_dispatch应用,解决了当我们的推送服务器集群处理后,客户端无法知道连接那个服务器的问题。不采用nginx负载均衡,是因为这属于中心负载均衡,当用户量大的时候,处理起来并不好。
- 推送系统说到底,还是客户端到服务端的数据流转问题。
2.短链接与长连接
- 短链接:请求/响应之后,关闭已建立的TCP连接,下次请求再建立一次连接。
- 长连接:请求/响应之后,不关闭TCP连接,多次请求复用同一个连接。
- 为了避免频繁创建连接/释放连接带来的性能损耗,以及保证消息获取的实时性,采用长连接的形式。
2.1粘包与拆包
-
发送方发送数据后,会放到缓冲区中
-
粘包:短时间内,多次发送的数据都比较少时,会累积到缓冲区中,当满足nagle算法时,才会发送,这时候就会发生粘包情况,即将多次请求的数据一并发送。
-
拆包:即一次发送的数据量太大时,会分成两次发送给接收方。
-
netty中的解决粘包与拆包:在netty职责链中新增一个handler节点,专门用来对数据进行解析或者编解码(netty中有提供编解码的类,我们可以使用现成的)。
3.使用websocket
WebSocket协议是基于TCP的一种新型的网络协议
-
它的出现实现了浏览器与服务器全双工通信:允许服务器主动发送消息给客户端。
-
处于应用层的协议,TCP三次握手之后,还需要校验,看是否支持此协议。
后续会不断进行补充