基于netty版本实现的kcp(包含fec功能的实现)
KCP是一个基于udp的快速可靠协议(rudp),能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。
<dependency>
<groupId>com.github.l42111996</groupId>
<artifactId>kcp-base</artifactId>
<version>1.4</version>
</dependency>
- 兼容c版本kcp
- fec基于 https://github.com/Backblaze/JavaReedSolomon 实现
- 完美兼容的C#版本,https://github.com/l42111996/csharp-kcp ,快速构建游戏前后端网络库
- 基于事件驱动,充分利用多核
- 优化fastack逻辑,降低10%流量
- 优化check函数。
- 优化集合迭代器。
- 包含fec,降低延迟
- 附带crc32校验
- 使用时间轮,优化大量连接cpu占用
- 使用directbuf和对象池,无gc压力
- 增加使用conv或者ip+port确定channel唯一性,游戏建议使用conv与tcp配置使用,相关资料
- 增加游戏使用时4G切换wifi等出口ip变动不会导致连接断开
- 单连接死循环收发包内存检测,性能测试
配置:mbp 2.3 GHz Intel Core i9 16GRam 单连接 带fec 5W/s qps 单连接 不带fec 9W/s qps - java服务端与c#客户端兼容测试
- 3000连接保持使用单核30%cpu
- fec结合directbuffer检测对应cpu最佳性能方案
- 大量客户端持续的连接,断开,发送消息,内存泄漏排查
- 高并发吞吐量下,rtt稳定性测试
- 大量连接同时断开时因为可能大量消息重发导致cpu和带宽暴涨,需要将interval时间增长,稳定后恢复
- https://github.com/skywind3000/kcp 原版c版本的kcp
- https://github.com/xtaci/kcp-go go版本kcp,有大量优化
- https://github.com/Backblaze/JavaReedSolomon java版本fec
- https://github.com/LMAX-Exchange/disruptor 高性能的线程间消息传递库
- https://github.com/JCTools/JCTools 高性能并发库
- https://github.com/szhnet/kcp-netty java版本的一个kcp
- https://github.com/l42111996/csharp-kcp 基于dotNetty的c#版本kcp,完美兼容
QQ:526167774