Netty学习笔记3: 私有协议栈开发
2015-07-20 17:50
225 查看
上图是《Netty权威指南》中的图,真是一图胜百言。
(1)Netty协议栈客户端发送握手请求消息,携带节点ID等有效身份认证信息。
(2)Netty协议栈服务端对握手请求消息进行合法性校验,包括节点ID有效性校验、节点重复登录校验、和IP地址合法性校验,校验通过后,返回登录成功的握手应答消息;
(3)链路建立成功之后,客户端发送业务消息;
(4)链路建立成功之后,服务端发送心跳消息;
(5)链路建立成功后服务端发送业务消息;
(7)服务端退出时,服务端关闭连接,客户端感知对方关闭连接后,被动关闭客户端连接。
备注:
(1)链路建立之后,服务时全双工的。
(2)双方之间心跳采用Ping-Pong机制,如果客户端Ping服务端多次不成,就等待下一个周期T后发起重连操作。
Netty协议支持的字段类型
boolean,byte,int,char,short,long,float,double,string,list,array,map,set
1、链路的建立
2、链路关闭
(1)主动关闭,这个我不需要,所以不考虑
(2)被动关闭:
#1:当对方宕机或者重启时,会关闭链路,另一方读取操作系统的通知信号,得知对方REST链路,需要关闭连接,释放自身的句柄等资源,由于采用TCP全双工通信,通信双方都需要关闭连接,释放资源。
#2:消息读写过程中,发生I/O异常。需要主动关闭连接。
#3:心跳消息读写过程中发生了I/O异常,需要主动关闭连接。
#4:心跳超时,需要主动关闭连接;
#5:发生编码异常等不可恢复错误时,需要主动关闭链接。
3、心跳机制
(1)当网络处于空闲状态达到T时,客户端主动发送Ping心跳消息给服务端。
(2)如果在下一个周期T到来时客户端没有收到对方发送的Pong心跳应答消息或者读取到服务端发送的其他业务消息,则心跳失败计数器加1
(3)每当客户端接收到服务的业务消息或者Pong应答消息,将心跳失败计数器清零;
(4)服务端网络空闲状态时间达到T后,服务端将心跳失败计数器加1;只要连接到客户端发送的Ping消息或者其他业务消息,计数器清零;
(5)服务端连续N次没有接收到客户端的Ping消息或者其他业务消息,则关闭链路,释放资源,等待客户端重连。
4、重连机制
要注意的只有一点,不是失败后立即重连,需要确保句柄资源释放,如果重连失败,必须打印异常堆栈信息。
5、重复登录保护
在缓存地址表中查看客户端死否已经登录,如果已经登录,则拒绝重复登录。
如果客户有ID,看此客户ID是否登录。
以上两个如果有一个验证未通过,返回-1
6、
相关文章推荐
- ubuntu中tinyos的安装
- django搭建微信后台——获取用户信息(7.20)
- 简易配置文件的读取(VB.NET)
- linux下tomcat启动正常,工程却无法访问
- 分类问题 boosting思想
- 马拉车算法
- 一只小蜜蜂...
- 简单易懂实例说明如何设计子网掩码
- bugzilla如何备份数据,导入导出数据库
- 安装WAMPServer,提示could not execute menu item internal error
- C中1234能组成多少个互不相同的三位数;求s=a+aa+aaa+aaaa+aaaaa;
- 解决filter登录验证死循环问题
- 【自考】——软件开发工具(一)
- 织梦dedecms软件模型发布页添加多图片展示方法
- Jquery on方法绑定事件后执行多次
- [LeetCode]ZigZag Conversion
- 资源汇总
- Maven开发基础总结(Maven自启动,Maven打war包,Maven热部署)
- IoC框架,依赖注入
- ./执行文本和sh命令执行文本的区别