Netty学习笔记3: 私有协议栈开发

本文详细介绍了Netty协议栈的工作流程,包括链路建立、关闭、心跳机制及重连机制等内容,并探讨了如何实现重复登录保护等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


上图是《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、












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值