Netty - 注册时无法写入通道(channelRegistered 事件)
Posted
技术标签:
【中文标题】Netty - 注册时无法写入通道(channelRegistered 事件)【英文标题】:Netty - can not write to channel at registration (channelRegistered event) 【发布时间】:2017-05-09 22:21:25 【问题描述】:我遇到了一个关于在频道注册时发送数据包的问题(客户端 -> 服务器)。 为了进一步测试,如果我在注册后发送数据包,我就可以发送数据包。 相反的方式(服务器 - >客户端)工作得很好。 注册功能:
@Override
public void channelRegistered(ChannelHandlerContext ctx) throws Exception
ctx.channel().write(new byte[] 0x00);
它还在过滤器链中遇到了一个编码器:
public class Encoder extends MessageToByteEncoder<byte[]>
@Override
protected void encode(ChannelHandlerContext ctx, byte[] b, ByteBuf bb) throws Exception
byte[] data = b.getData();
bb.writeInt(data.length);
bb.writeBytes(data);
因此,服务器没有收到上述数据包 - 结果, 我调试以查看 channelRead 事件是否已触发,但它没有。 (我的解码类也没有解码数据)
有什么假设吗?
【问题讨论】:
【参考方案1】:channelRegistered
在频道注册到它的 EventLoop 时被调用。这并不意味着它已经准备好发送数据,通道甚至还没有打开一个套接字。
你想要channelActive
,它在通道处于活动状态时调用,即准备发送和接收数据。
【讨论】:
我明白了,我想我不应该急于阅读 API 描述,谢谢您的启发:)以上是关于Netty - 注册时无法写入通道(channelRegistered 事件)的主要内容,如果未能解决你的问题,请参考以下文章