jboss的netty中下游事件是如何工作的?

2023-12-26

刚刚开始使用 netty 来实现我自己的服务器。我花了一段时间才掌握它的窍门,但现在我能够通过编写自己的 MessageHandler 来接受客户端,并且在 messageReceived 内部我能够从缓冲区中读取数据并执行一些与接收到的数据相关的业务逻辑。

但现在的问题是,如何将数据写入连接的客户端?我看到了示例代码,您可以在出现新消息时写入通道,如下所示:

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

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

我进一步查看代码,看到了一个名为 writeRequested 的方法。这有关系吗?谁这么称呼的?以及有必要吗?


只要您拥有对 Channel(或 ChannelHandlerContext)的引用,您就可以从任何地方、任何线程调用 Channel.write()(或 Channels.write())。

当您通过调用 Channel.write() 或调用 ChannelHandlerContext.sendDownstream(MessageEvent) 触发 writeRequested 事件时,将调用 writeRequested()。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jboss的netty中下游事件是如何工作的? 的相关文章

随机推荐