2010-07-11 27 views
3

刚开始使用netty来实现我自己的服务器时,花了我一段时间来掌握它,但现在我可以通过编写自己的MessageHandler来接受客户端,并且在messageReceived中我能够从缓冲区中读取数据,并且执行了与接收到的数据相关的一些业务逻辑。下游事件如何在jboss的netty中工作?

但现在的问题是,我如何将数据写入连接的客户端?我看到的那段代码,你可以写信给渠道在这样一个新的消息的事件:

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

,但如果你不希望将数据写回到该点什么呢?如果客户端在套接字中保持连接并等待服务器中发生某些事件,该怎么办?在这种情况下,我的服务器将如何找到正确的套接字来写入?我想保留对频道对象的引用吗?这是惯例吗?

我进一步查看代码并看到了一个名为writeRequested的方法。那是相关的吗?谁会这样称呼?它需要吗?

回答

6

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

writeRequested()是通过调用Channel.write()或调用ChannelHandlerContext.sendDownstream(MessageEvent)来触发writeRequested事件时调用的。