2012-04-12 86 views
0

在使用Netty通道的基於TCP的服務器 - 客戶端模型中,服務器上的Channel.write()和接收客戶端上對應的Channel.messageReceived()之間是否有任何對應關係?如果我在發件人上執行了10 writes(),是否意味着messageReceived()將在偵聽客戶端上調用10次?或Netty可以將發送的數據(來自發件人的write())彙總到客戶端上的或多或少的messageReceived()事件中?有沒有辦法在Netty中配置這種行爲?Netty中的Channel.messageReceived事件

回答

1

它不保證你有你的Channel.write(..)和messageReceived調用1:1映射。您需要使用一些FrameDecoder子類(可能自己寫),它將緩衝ChannelBuffer,直到您收到足夠的數據將您的消息分發到服務器上ChannelPipeline中的下一個ChannelHandlers。

Netty已經提供了一些準備好使用FrameDecoder的實現,例如The DelimiterBasedFrameDecoder(例如),它會在緩衝數據之前保留數據,直到它接收到分隔符,然後將其分派到ChannelPipeline中的下一個處理程序。

有關更多詳細信息,請參見[1]。

[1] http://netty.io/docs/stable/api/org/jboss/netty/handler/codec/frame/FrameDecoder.html

0

是的,有一種方法可以做到這一點,但爲了做其他事情,您必須給我們更多的東西。