我们的场景如下:有一个使用 Netty 编写的 TCP 服务器。有多个客户端与服务器建立连接。建立连接后,可以在两个方向上发送消息。为了能够将消息传递给正确的收件人,我需要在处理程序之外维护通道。我知道ChannelGroup这让我可以轻松实现广播服务器(向所有客户端发送一条消息)。现在的需求是如何写入特定的通道。我正在考虑使用ChannelGroup特定于客户端的 id 映射(将Map<ClientId, ChannelId>客户端 id 映射到通道 id)来丰富它。通过这种方式,有了客户端 ID,我就可以轻松获取频道并写入内容。现在我的问题是:ChannelHandlerContext一般来说,写via和via有什么区别Channel?(因为ChannelGroup给了我Channelnot ChannelHandlerContext)。维持 的小组是不是一个坏主意ChannelHandlerContext?(换句话说,我们为什么没有ChannelHandlerContextGroup)?还有其他建议如何做吗?
1 回答
繁星coding
TA贡献1797条经验 获得超4个赞
1)Channel与ChannelHandler上下文上的操作之间的区别在于,例如,当使用时,Channel.write(...)
它将开始遍历while ChannelPipeline
(从尾部到头部),而使用ChannelHandlerContext.write(...)
它将开始遍历属于给ChannelPipeline
定的ChannelHandlerContext
中的具体位置,因为它与之前添加的ChannelPipeline
“相关” 。ChannelHandler
2)这不是一个坏主意,但大多数时候使用的用户ChannelGroup
想要使用Channel.write(...)
(见上文)
3)使用ChannelGroup
orMap
即可。使用时,请确保关闭后将Map
删除Channel
/ 。 ChannelHandlerContext
Map
Channel
添加回答
举报
0/150
提交
取消