2010-07-11 31 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事件時調用的。