我正在使用NioSocketChannel。 我必须使用它,因为它是唯一一个与netty的Bootstrap配合使用的代码:
Bootstrap b = new Bootstrap();
b.group(group).channel(NioServerSocketChannel.class)
当我收到消息时,在NioSocketChannel中,我无法从中读取消息。 这个类中没有对缓冲区的读取,只有简单的read(),它返回Channel,当我尝试使用它时抛出异常:"通道未注册到事件循环"
有人熟悉这门课吗? 谢谢, Osnat。
答案 0 :(得分:1)
您需要注册管理事件循环的处理程序。然后,您不直接从通道读取,而是连接到通道并向其注册观察者。细节取决于您的实际环境,但大致可能如下所示:
Bootstrap b = new Bootstrap();
b.group(group).channel(NioServerSocketChannel.class).handler(/* your handler */)
ChannelFuture channelFuture = b.connect(socketAddress, new InetSocketAddress(address, port));
responseFuture.addListener(new ChannelFutureListener() {
// ... listen to changes
}
programcreek上有很多优秀的代码段,这些代码片段可以帮助您解决问题。