Netty框架与通讯设计的完美融合
2023-09-07 21:55:54 6 举报
Netty框架与通讯设计的完美融合
作者其他创作
大纲/内容
消息类型
消息体(Object类型)
粘包半包编码器
重写userEventTriggered:如果是 ,发送心跳报文重写channelRead:判断是否心跳应答消息,是的话处理,并释放消息的引用计数。不是,消息向下传递重写exceptionCaught:如果捕获到 ,服务器长时间未应答,关闭连接
. . .
心跳应答
入栈
ReadTimeoutException
读空闲检测
认证请求
判断是不是认证请求,是,进行认证应答;不是,消息向下传递重写exceptionCaught:如果认证异常,关闭channel
网络传输
ReaderIdleStateEvent 事件
写空闲检测
Executors.newScheduledThreadPool(1)
非正常关闭
登录认证
粘包半包解码器
初始化服务端ChannelPipeline
内置的ReadTimeoutHandler注册一个定时任务,在指定的超时时间内检查是否有读操作发生。如果在超时时间内没有读操作,就会抛出
内置的IdleStateHandler检查客户端如果指定时间内没有写操作,触发
发起连接
定时线程池
出栈
业务处理
md5摘要
客户端
心跳请求
finally块
如果是心跳请求,构建心跳包应答客户端,并释放原始消息的引用计数如果不是心跳请求,消息向下传递重写exceptionCaught:如果捕获到 ,主动关闭连接重写channelInactive:记录日志TCP不活动了,客户端已关闭连接;并调用父类,进行资源清理
重写channelActive:TCP经过三次握手建立连接之后,会触发客户端这个方法,进行认证请求重写channelRead:判断是否应答报文,是的话,如果通过认证移除当前Handler;不是的话,消息向下传递
服务端断线自动重连机制
序列化
登录、心跳、one_way、two_way、. . .
消息头
初始化ChannelPipeline
反序列化
粘包半包解码
校验md5oneway消息不需要应答,two_way消息需要应答可以将任务提交到专门的业务线程池异步处理,不占用IO线程,提升性能
消息ID
粘包半包编码
提交
0 条评论
回复 删除
下一页