2011-11-30 49 views
2

在Netty中,有沒有人知道在處理它時,Netty框架將同時向ChannelBuffer傳遞給上游事件的處理程序(在從ChannelEvent /或MessageEvent進行投射之後) ?Netty是否同時修改傳遞的ChannelBuffers

用戶指南和示例沒有明確說明這是否會發生。

例如,假設在下面延伸SimpleChannelHandler和綁定爲一個網狀服務器上的處理程序一類的方法:

@Override 
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) 
{ 
    ChannelBuffer buffer = (ChannelBuffer) e.getMessage(); 

    if (buffer.readableBytes() == 4) 
    { 
    // Is it possible for the number of readable bytes to increase here? 
    } 
} 

在上述方法中,有可能是可讀的字節到數增加註釋行(假設客戶端仍在發送數據),還是將這些幀保證爲單獨的消息,而不是寫入提供的緩衝區?

我問的原因是要知道我是否應該在執行一些處理之前將緩衝區複製到本地緩衝區,或者是否這樣的副本是多餘的。

回答

4

一旦Netty創建了一個ChannelBuffer並觸發了一個MessageEvent它,它沒有Netty的手,因此Netty不會以任何方式修改它。處理程序或其他用戶代碼可以修改緩衝區,但通常,編寫良好的處理程序不會干擾其他處理程序。如果一個錯誤的處理程序保持對接收緩衝區的引用並在稍後修改,那麼您將看到破壞的緩衝區狀態。

+0

感謝Trustin!我認爲/希望這是行爲,只是想確保我沒有遇到任何奇怪的錯誤。 –