为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼唤远方 2023-09-20 14:35:56
我们的场景如下:有一个使用 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)使用ChannelGrouporMap即可。使用时,请确保关闭后将Map删除Channel/ 。 ChannelHandlerContextMapChannel


查看完整回答
反对 回复 2023-09-20
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信