Netty 3.X: разные декодеры для разных сокетов - PullRequest
0 голосов
/ 03 декабря 2018

Я использую Netty 3.X.

У меня есть Netty - ServerBootstrap, работающий на порту 8080.

Два клиента (ClientBootstrap) хотят подключитьсяна тот же сервер - Client_A и Client_B.

Но проблема в том, что Client_A отправляет ProtoBuff сообщение типа ClientMsgClient_B отправляет ProtoBuff тип сообщения ClientMsgTwo.

Как мне обработать это на конвейере сервера?Я имею в виду - Как я могу добавить ProtobufDecoder для ClientMsg и ClientMsgTwo.Что-то вроде -

ChannelPipeline pipeline = Channels.pipeline();

pipeline.addLast("ProtobufVarint32FrameDecoder", new ProtobufVarint32FrameDecoder());

// ProtobufDecoder for ClientMsg
    pipeline.addLast("ProtobufDecoder", new ProtobufDecoder(ClientMsgContainer.ClientMsg.getDefaultInstance()));

// ProtobufDecoder for ClientMsgTwo
    pipeline.addLast("ProtobufDecoderTwo", new ProtobufDecoder(ClientMsgContainerTwo.ClientMsgTwo.getDefaultInstance()));

Чтобы сервер мог правильно обрабатывать оба сообщения ClientMsg и ClientMsgTwo?

Примечание. Использование ByteToMessageDecoder не вариант, потому что нет способамы можем различать типы сообщений, читая несколько начальных байтов.

...