Netty - 在处理程序之外维护通道映射的正确方法

我们的场景如下:

  1. 有一个使用 Netty 编写的 TCP 服务器。

  2. 有多个客户端与服务器建立连接。

  3. 建立连接后,可以在两个方向上发送消息。

为了能够将消息传递给正确的收件人,我需要在处理程序之外维护通道。我知道ChannelGroup这让我可以轻松实现广播服务器(向所有客户端发送一条消息)。

现在的需求是如何写入特定的通道。
我正在考虑使用ChannelGroup特定于客户端的 id 映射(将Map<ClientId, ChannelId>客户端 id 映射到通道 id)来丰富它。通过这种方式,有了客户端 ID,我就可以轻松获取频道并写入内容。

现在我的问题是:

  1. ChannelHandlerContext一般来说,写via和via有什么区别Channel?(因为ChannelGroup给了我Channelnot ChannelHandlerContext)。

  2. 维持 的小组是不是一个坏主意ChannelHandlerContext?(换句话说,我们为什么没有ChannelHandlerContextGroup)?

  3. 还有其他建议如何做吗?


呼唤远方
浏览 102回答 1
1回答

繁星coding

1)Channel与ChannelHandler上下文上的操作之间的区别在于,例如,当使用时,Channel.write(...)它将开始遍历while&nbsp;ChannelPipeline(从尾部到头部),而使用ChannelHandlerContext.write(...)它将开始遍历属于给ChannelPipeline定的ChannelHandlerContext中的具体位置,因为它与之前添加的ChannelPipeline“相关” 。ChannelHandler2)这不是一个坏主意,但大多数时候使用的用户ChannelGroup想要使用Channel.write(...)(见上文)3)使用ChannelGrouporMap即可。使用时,请确保关闭后将Map删除Channel/&nbsp;。&nbsp;ChannelHandlerContextMapChannel
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java