# Netty自定义协议 **Repository Path**: lessbb/netty-custom-protocol ## Basic Information - **Project Name**: Netty自定义协议 - **Description**: netty实现自定义协议通讯,心跳保持,短线重连 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 20 - **Forks**: 0 - **Created**: 2021-11-19 - **Last Updated**: 2023-11-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简介 项目基于netty实现采用自定义协议方式通讯,同时支持心跳机制和重连机制 # 功能 #### 自定义协议 | 魔数 2byte | 指令类型 1byte | 数据长度 4byte | 数据内容 (长度不定) | 协议的编码、解码工作由`MyMessageEncoder`,`MyMessageDecoder`两个类完成,在tcp传输过程中的拆、粘包问题使用`LengthFieldBasedFrameDecoder`类解决。 #### 心跳机制 - 服务端采用 `IdleStateHandler`,在一段时间内(默认15s)没有读到客户端消息则说明客户端已离线,服务器会触发读超时事件断开连接 - 客户端采用定时(默认10s)任务方式向服务端发送一个ping消息作为心跳包,避免服务器读超时事件的发生。 - 服务端在收到客户端的ping消息后,将回复一条pong消息给客户端,双方都能检测对方是否活跃。 #### 断线重连 重连策略包含两个维度: - 是否重连 设置重连次数来判断是否重连,重连次数耗尽则停止重连并关闭客户端 - 多长时间重连 短时间内频繁重连既消耗资源又没有必要,好的重连策略希望因为网络抖动偶然断开时能短时间内重连,由于服务器、网络故障长时间断开时,又能在足够大的间隔后重连。 因此,默认重连策略的间隔时间随着次数的增加呈几何级数增长,直到达到最大值为止。 #### 在线设备 统计在线设备数量,有客户端连接时计数器加1,有客户端断开时,计数器减1。计数器保证线程安全 # 使用方式 1、启动netty-server项目 2、启动netty-client项目,观察连接日志和心跳数据日志 3、停止netty-server项目,观察netty-client重连日志 4、启动netty-server项目,观察netty-client重连日志 # 捐赠 项目如对您有帮助,请帮忙点颗小星星