JBoss的Netty中下游事件是如何工作的?

3

我刚刚开始尝试使用Netty实现自己的服务器。花了一段时间才摸清楚,但是现在我写了自己的MessageHandler并在messageReceived中读取了缓冲区数据,还进行了一些与接收到的数据相关的业务逻辑,最终成功地接受了客户端。

然而,现在的问题是,我如何向已连接的客户端编写数据呢?我看到了示例代码,在新消息事件中可以像这样写入通道:

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    Channel ch = e.getChannel();
    ch.write(e.getMessage());
}

但是如果你不想在那个时候写回数据怎么办?如果客户端保持在套接字上连接并等待服务器中发生某些事件,那么该怎么办?在这种情况下,我的服务器如何找到正确的套接字进行写入?我是否应该保留对通道对象的引用?这是约定吗?

我进一步查看了代码,并看到了一个名为writeRequested的方法。那与此有关吗?谁调用它?这需要吗?

1个回答

6
只要您有通道的引用(或通道处理器上下文),就可以从任何地方、任何线程调用Channel.write()(或Channels.write())。
当您调用Channel.write()或调用ChannelHandlerContext.sendDownstream(MessageEvent)触发writeRequested事件时,将调用writeRequested()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接