我正在使用带有 Netty(3.2.3 版本)的 UDP 协议运行客户端-路由器-服务器场景
我看到客户端和服务器通道在 NIO 工作人员中注册得很好,但是从服务器返回的响应被分配给了错误的工作人员,(NIODatagramWorker)所以它是一个不同的选择器并且消息到达了错误的管道(好像它来自客户端)。
请指教,耶尔
我正在使用带有 Netty(3.2.3 版本)的 UDP 协议运行客户端-路由器-服务器场景
我看到客户端和服务器通道在 NIO 工作人员中注册得很好,但是从服务器返回的响应被分配给了错误的工作人员,(NIODatagramWorker)所以它是一个不同的选择器并且消息到达了错误的管道(好像它来自客户端)。
请指教,耶尔
Netty UDP 有点棘手。UDP 实际上只有一个管道,因此如果您更改选择器或管道内的处理程序,它可能不会产生预期的影响。查看 Netty 用户组中的这个UDP Woes 链接,其中有 Trustin Lee 对此行为的解释。
因此,您在使用 UDP 时的一般情况是
1)使用您的解码器和编码器创建一个管道工厂和管道。
2) 使用 hashmap 或类似的数据结构来查找传入数据并将其路由到您拥有的正确会话。
3) 回写时,使用 write(data,remoteSocketAddress) 方法,而不是 channel 的普通 write 方法。