您的位置:首页 > 其它

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、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: