刚开始与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()。