2012-08-17 72 views
1

有什麼方法可以設置多個protobufEncoder/protobufDecoder嗎?Protobuf和Pipeline問題

讓我解釋一下我的疑難問題具有將從 客戶端向服務器發送一個命令,服務器獲取指令並做根據 到command.Now響應(「答案」)的一些工作該服務器可以是: 字符串的長度,或者是整數平方(順序不確定)

我的問題是,現在我能做些什麼,該客戶端可以從服務器接收至少兩個 不同的反應?兩者都是使用Protobuf和 進行「編碼」,我需要做的是服務器可以發送至少兩個不同的 響應?也都是用Protobuf「編碼」。兩者都是帶有protobuf的「解碼器」。

netty的ProtobufDecoder設置兩個不同的protobufEncoder /解碼器是不可能的。

讓我們來看看下面的網狀例如,解碼器只能接收解碼器對象

LocalTimeServerPipelineFactory:

public ChannelPipeline getPipeline() throws Exception { 
    ChannelPipeline p = pipeline(); 
    p.addLast("frameDecoder", new ProtobufVarint32FrameDecoder()); 
    p.addLast("protobufDecoder", new ProtobufDecoder(LocalTimeProtocol.Locations.getDefaultInstance())); 

    p.addLast("frameEncoder", new ProtobufVarint32LengthFieldPrepender()); 
    p.addLast("protobufEncoder", new ProtobufEncoder()); 

    p.addLast("handler", new LocalTimeServerHandler()); 
    return p; 
} 

在此先感謝和最誠摯的問候。

石英

回答

0

您可以隨時調整ChannelPipeline。這應該可以幫助你。只需在需要時添加/刪除正確的一個。

+0

如果我用包絡協議包裝protobuf消息。例如: 。添加一個編碼器和解碼器,其目的是爲protobufEncoder和protobufDecoder添加一個消息頭。 感覺如何? – zhanghua 2012-08-17 07:17:36