我正在使用4.0.4版本。在我的項目中有兩種類型的協議。一個是消息,另一個是命令。當通道激活時,我如何區分兩種協議類型?
我順利地通過參考portunification
例如區分。但是我發現區分邏輯是在decode
方法中編碼的。這意味着我只能通過首先發送消息來識別它們。吼是代碼:
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in,
List<Object> out) throws Exception {
if (in.readableBytes() < 4) {
return;
}
int identifier = in.getUnsignedByte(in.readerIndex());
if(identifier == 'C') {
switchToCommand(ctx);
} else {
switchToMessage(ctx);
}
}
private void switchToCommand(ChannelHandlerContext ctx) {
ChannelPipeline p = ctx.pipeline();
p.addLast(new CommandHandler());
p.remove(this);
}
private void switchToMessage(ChannelHandlerContext ctx) {
ChannelPipeline p = ctx.pipeline();
p.addLast(new MessageHandler());
}
更糟糕的是它可能不是我CommandHandler
和MessageHandler
內觸發channelActive
事件。我認爲channelRegistered
也不起作用。
當頻道被激活時,有什麼辦法可以區分它們嗎?或者我應該如何處理我的情況?因爲我想在channelActive
中做某些事情,例如發送歡迎消息或將頻道添加到羣組。 謝謝!
你想確定協議的種類而不檢查數據?這將是猜測,或魔術。 –