自定义协议栈需要着重考虑以下几个方面:
可靠性
心跳
主要用于检测建立通信的对方是否正常。
- 客户端网络处于空闲状态超过T,则需要主动发送心跳给服务器端;
- 客户端如果超过时间T,没有收到服务器端的心跳回复或者业务数据,则心跳失败计数+1;
- 服务器端在超过时间T后没有收到客户端心跳,则客户端心跳失败计数+1;
- 心跳计数到达N之后,则关闭链路,重新连接或者等待被重新连接。
重连
重新连接需要有间隔,并不是马上、毫无间隔进行重连。
重复连接限制
正常情况下,不应该允许客户端重复连接,防止反复连接导致服务器资源耗尽。
消息缓存重发
当链路中断了,则缓存在消息队列中的消息,则需要保存起来,等待重新连接之后,进行发送;
同时避免消息队列无限膨胀,则需要设置消息队列大小上限,超过了则不允许添加新消息。
安全
安全策略包括ip白名单、数据加密等等。
扩展性
增加保留字段、业务域字段等等,避免因为协议变更,导致原先代码完全不可用。
网友评论