netty ネットワーク ライブラリを使用して、ゲーム クライアント用のログイン サーバーを構築しました。
このゲーム クライアントは、1 つのバッファで複数のパケットを送信することを好みますが、これが問題を引き起こします。その問題は、netty デコード クラスでは、1 つのメッセージしか返せないという事実です。
次に、複数のパケットを複数のメッセージに読み込んで、それらを 1 回のデコード メソッド呼び出しで返すことは不可能です。
私の質問は、1 回の DecoderClass.decode() メソッド呼び出しで複数のパケットを受信するにはどうすればよいですか? オブジェクトを 1 つしか返せないので、当惑しています。
私の予備のデコードクラスは次のとおりです。
protected Object decode(ChannelHandlerContext ctx, Channel c, ChannelBuffer buf,
VoidEnum state) throws Exception {
short length = -1;
short opcode = -1;
short security = -1;
while(buf.readableBytes() != 0 ){
length = buf.readShort();
opcode = buf.readShort();
security = buf.readShort();
}
System.out.println("---------------------------------------");
System.out.println("receivedLength: " + length);
System.out.println("receivedOPCode: " + opcode);
System.out.println("receivedSecurity: " + security);
System.out.println("---------------------------------------");
MessageCodec<?> codec = CodecLookupService.find(opcode);
if (codec == null) {
throw new IOException("Unknown op code: " + opcode + " (previous opcode: " + previousOpcode + ").");
}
previousOpcode = opcode;
return codec.decode(buf);
私の完全な github リポジトリはこちらです: https://github.com/desmin88/LoginServer
誰かが私の問題を十分に理解できるように、十分な情報を提供したことを願っています
ありがとう、
ビリー