我想創建處理程序等的管道:Netty的 - 如何通過處理器之間的信息在同一管道
public ChannelPipeline getPipeline() throws Exception
{
return Channels.pipeline(
new ObjectEncoder(),
new ObjectDecoder(),
new AuthenticationServerHandler(),
new BusinessLogicServerHandler());
}
這裏的關鍵是,我想的AuthenticationServerHandler
能夠通過登錄信息到BusinessLogicServerHandler
。
我明白,你可以使用Attachment
,但只存儲該處理程序的信息,管道中的其他處理程序不能訪問它。我也注意到有一種叫做ChannelLocal
的東西可能會訣竅,但是我找不到任何有關如何使用它的真實信息。我所見過的是人們爲它創建一個靜態實例,但是如何在另一個處理程序中檢索和訪問信息?假設這是正確的方法。
我的問題是:如何在同一管道中的處理程序之間傳遞信息。在上面的示例中,我如何將登錄憑證從AuthenticationServerHandler
傳遞到BusinessLogicServerHandler
?
這就是我所理解的(概念上或多或少),但是我還沒有找到任何關於如何做到這一點的例子。我對這些細節還是有點模糊...... –
我們不再使用Apache James Protocols,但我認爲你可以從舊代碼中得到這個想法: http://svn.apache.org/viewvc /james/protocols/tags/protocols-1.5/impl/src/main/java/org/apache/james/protocols/impl/ChannelAttributeSupport.java?view=markup http://svn.apache.org/viewvc/ james/protocols/tags/protocols-1.5/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java?view = markup –
下面是ChannelLocal的一個例子。 http://stackoverflow.com/questions/8449663/usage-of-nettys-channellocal – Veebs