Netty:netty 中通道的进程生命周期是啥?

Posted

技术标签:

【中文标题】Netty:netty 中通道的进程生命周期是啥?【英文标题】:Netty: What is the process lifecycle of a channel in netty?Netty:netty 中通道的进程生命周期是什么? 【发布时间】:2019-01-02 04:35:29 【问题描述】:

我最近在学习 Netty。我遇到了一个问题,就是我在 ChannelInboundHandler.channelActive 方法中放了一个 BlockingQueue。

针对我想从 BlockingQueue 中获取消息,然后将消息发送到通道,但事实是只有一条消息发送到服务器。 下面是代码:

@Override
public void channleActive(ChannelHandlerContext ctx) throws Exception
   String msg = null;
   while(true)
      msg=msgQueue.take();
      ctx.writeAndFlush(Unpooled.copiedBuffer(msg, CharsetUtil.UTF_8));
   

但它不起作用,我只从channelRead() 方法得到一个响应。 我对 netty 生命周期的理解是错误的吗?有人可以帮我解释一下吗?

【问题讨论】:

【参考方案1】:

您的代码基本上会在channelActive 中“阻塞”,这意味着EventLoop 将永远无法做任何其他事情。这是不允许的。

【讨论】:

谢谢!但是我还不知道channel中写消息的全过程,你知道全吗?比如客户端可能是connect->channelActive->channelRead ->readComplete(可能不正确)。就像这样。谢谢!

以上是关于Netty:netty 中通道的进程生命周期是啥?的主要内容,如果未能解决你的问题,请参考以下文章

netty,websocket,ipc(lpc和rpc),Nio之间的相互调用

是啥导致了netty中的这种内存泄漏

netty优雅关闭channel通道

使用netty编写第一个hello netty服务器

Netty 关闭/解除绑定服务器通道

Netty:在另一个方法中使用匿名内部类中定义的通道