刚开始使用 netty 来实现我自己的服务器。我花了一些时间来掌握它,但现在我能够通过编写自己的 MessageHandler 来接受客户,并且在 messageReceived 中我能够从缓冲区中读取并执行一些与接收到的数据相关的业务逻辑。
但是现在的问题是,如何将数据写入连接的客户端?我看到了示例代码,您可以在其中写入这样的新消息:
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
Channel ch = e.getChannel();
ch.write(e.getMessage());
}
但是如果此时您不想写回数据怎么办?如果客户端在套接字中保持连接并等待服务器中发生某些事件怎么办?在那种情况下,我的服务器将如何找到正确的套接字来写入?我应该保留对 channel 对象的引用吗?这是惯例吗?
我进一步查看了代码,发现了一个名为 writeRequested 的方法。那有关系吗?谁这么叫的?有必要吗?
最佳答案
只要您拥有对 Channel(或 ChannelHandlerContext)的引用,就可以从任何地方、任何线程调用 Channel.write()(或 Channels.write())。
当您通过调用 Channel.write() 或调用 ChannelHandlerContext.sendDownstream(MessageEvent) 触发 writeRequested 事件时调用 writeRequested()。
关于java - 下游事件在jboss的netty中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222134/