我可以在 HashMap 中缓存来自 ChannelHandlerContext 的频道吗?

Can i cache the channel from ChannelHandlerContext in a HashMap?

如果我缓存 Channel [ctx.channel()] 而不是缓存 ChannelHandlerContext 会有什么不同吗?

下面是实现步骤和问题:

  1. Netty 服务器处理程序从客户端接收消息
  2. 因为还有其他运行线程处理用户数据,我们需要把这个请求放到一个队列中,让worker处理
  3. 我们需要有相同的连接用于服务器和客户端之间的多个消息交换
  4. 每当消息准备好从工作线程发送到客户端时,使用缓存在 HashMap 中的通道是一个好习惯

    最终 ChannelFuture 状态 = channel.writeAndFlush(Unpooled.copiedBuffer(payload.getBytes()));

  5. 而每当工作线程想要关闭与客户端的连接时,如果我们关闭缓存的通道,就足够了吗?

看到这个

上面是关于ChannelHandlerContext的使用,我的是关于channel的。使用 ChannelHandlerContext 与 Channel

相比还有什么优势

谢谢大家

是的,您可以缓存 Channel 并在以后使用。如果您需要的只是稍后 writeAndFlush() 来自另一个线程的消息,则只需缓存 Channel 就可以了。

ChannelHandlerContext 当您想动态修改管道、在管道上下触发事件等时很有用。如果不需要这些,您可以只使用 Channel.