一、UDP 通信实现
1. UDP 单播
2. UDP 广播
二、服务器推送技术对比
技术 原理 优点 缺点 适用场景 短轮询 (Ajax) 定时发送 HTTP 请求(如每3秒) 实现简单,兼容性好 资源浪费,延迟高 低实时性需求(如天气更新) Comet HTTP 长连接(长轮询/流) 减少无效请求 服务器维护连接开销大 中等实时性(邮件通知) SSE 基于 HTTP 的单向服务端推送 原生浏览器支持,自动重连 仅支持文本,不支持二进制 实时日志流、股票行情 WebSocket 全双工双向通信(独立协议) 低延迟,支持二进制数据 需额外协议实现 即时通讯、在线游戏
WebSocket 握手过程 :
客户端发起 HTTP 升级请求(Upgrade: websocket
) 服务端响应 101 Switching Protocols
建立连接
三、WebSocket 进阶应用
1. STOMP 协议
作用 :在 WebSocket 上实现消息队列语义(发布-订阅)。帧结构 :COMMAND
header1:value1
header2:value2Body^@
Spring Boot 集成 :@Configuration
@EnableWebSocketMessageBroker
public class StompConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker ( MessageBrokerRegistry registry) { registry. enableSimpleBroker ( "/topic" ) ; registry. setApplicationDestinationPrefixes ( "/app" ) ; } @Override public void registerStompEndpoints ( StompEndpointRegistry registry) { registry. addEndpoint ( "/chat" ) . withSockJS ( ) ; }
}
2. 消息路由
类型 实现方式 代码示例 广播 @SendTo("/topic/greetings")
所有订阅者接收相同消息 点对点 @SendToUser("/queue/private")
仅指定用户接收(需认证)
四、私有协议开发框架
1. 协议栈设计要点
模块 功能 Netty 实现 编解码 消息 ↔ 二进制转换 MessageToMessageCodec
白名单认证 IP 过滤 ChannelInboundHandlerAdapter
拦截连接心跳机制 链路保活 IdleStateHandler
+ 自定义响应断连重连 客户端自动重连 ChannelFutureListener
监听连接状态可靠性保障 消息重传、序号校验 滑动窗口协议(类似 TCP)
2. 消息结构定义
message NettyMessage {Header header = 1; // 消息头bytes body = 2; // 消息体
}message Header {uint32 version = 1; // 协议版本string sessionId = 2; // 会话IDuint32 sequence = 3; // 消息序号
}
3. 关键实现代码
pipeline. addLast ( "idleHandler" , new IdleStateHandler ( 30 , 0 , 0 , TimeUnit . SECONDS) ) ;
pipeline. addLast ( "heartbeat" , new HeartbeatHandler ( ) ) ;
@Override
public void channelActive ( ChannelHandlerContext ctx) { String ip = ctx. channel ( ) . remoteAddress ( ) . toString ( ) ; if ( ! whiteList. contains ( ip) ) { ctx. close ( ) ; }
}
五、性能优化实战
1. 线程模型调优
BossGroup :1-2 线程(连接接收)。WorkerGroup :CPU 核数 × 2 线程(I/O 处理)。业务线程池 :耗时操作异步执行,避免阻塞 EventLoop。
2. 零拷贝优化
CompositeByteBuf :合并多个 Buffer 减少内存复制。FileRegion :大文件传输直接使用 OS 零拷贝机制。
六、应用场景总结
场景 技术方案 物联网设备通信 UDP 广播 + 私有协议(低功耗) 金融交易系统 WebSocket + STOMP(低延迟) 视频直播推流 UDP 单播 + 自定义重传机制 企业级 IM 系统 WebSocket + 私有消息协议
核心结论 : Netty 的核心价值在于 “协议自由” 与 “性能可控” :
通过 UDP/WebSocket/私有协议满足不同场景的传输需求; 通过线程模型优化、零拷贝、可靠性保障实现高性能通信; 结合 STOMP 等上层协议可快速构建复杂应用(如聊天室、实时监控)。 生产环境中,建议优先使用 WebSocket + STOMP 简化开发,在超高性能场景(如金融交易)改用 自定义私有协议 。