- 当前项目:
rxlib - 模式结论:高性能模式(Netty 底层网络编程)
- 适用范围:涉及网络协议、长连接、传输层、编解码、连接管理、多线程并发模型的所有代码。
- Java 版本:严格 Java 8。
- 网络框架:优先原生 Netty 能力,避免引入 Spring 风格封装到性能敏感路径。
- 性能目标:零分配优先、低延迟优先、吞吐优先。
- 热点路径禁止频繁
new对象。 - 优先
PooledByteBufAllocator、Direct Buffer、零拷贝。 ByteBuf必须遵守引用计数语义,确保成对释放(必要时使用ReferenceCountUtil.release())。- 禁止在高频路径构造临时字符串、正则对象、反射调用。
- 优先使用
EventLoop线程亲和性,避免无意义线程切换。 - I/O 线程不得执行阻塞逻辑(阻塞 I/O、长计算、阻塞锁等待)。
- 业务线程池与 I/O 线程池职责分离,避免相互抢占。
- 降低锁竞争,优先无锁或低锁开销结构。
- 自定义协议解析必须保持浅调用栈、低分支开销、低对象分配。
- 性能敏感循环避免过度抽象和高频 Lambda。
- 优先基本类型集合(例如 fastutil)而非装箱集合。
- 避免系统阻塞式 DNS 解析(如
InetAddress.getByName())进入关键链路。 - 优先使用 Netty DNS 组件(如
DnsNameResolver)或远程解析策略,降低本地污染风险。
任何网络改动都必须显式评估并验证以下项:
- 内存泄漏风险(ByteBuf/Channel/任务对象)
- 背压处理(读写水位、队列堆积、限流策略)
- 连接生命周期(建连、保活、半关闭、异常断开、重连)
- 线程模型合理性(EventLoop 数量、业务池隔离)
- 协议兼容性与编解码性能
- 核心监控指标(至少包含堆外内存占用、连接数、吞吐/延迟)
核心目录:rxlib/src/main/java/org/rx/net
transport:TCP/UDP 基础传输socks:SOCKS5/Shadowsocks/UDP 中继/HTTP Tunnelrpc:Remoting RPChttp:HTTP Server/Clientdns:DNS Client/Serversupport:路由、域名匹配、上游选择
优先关注类:
TransportFlags、Sockets、BackpressureHandlerSocksProxyServer、SocksContextRemoting、RpcClientConfig、RpcServerConfigTcpServer、TcpClient、UdpClient
- 小改动:必须补充对应单元测试并验证通过。
- 大改动:必须补充单元测试 + 集成测试并验证通过。
- 默认构建跳过测试;需要运行测试时必须显式传入
-DskipTests=false。 - 网络相关优先回归:
SocksProxyServerIntegrationTestShadowsocksServerIntegrationTestSocks5ClientIntegrationTestRrpIntegrationTestRemotingTestDnsServerIntegrationTest
- 是否引入热点路径对象分配。
- 是否存在 ByteBuf/Channel 生命周期泄漏点。
- 是否出现 I/O 线程阻塞。
- 客户端/服务端
TransportFlags是否对齐。 - 是否补充并执行了相应测试。