我使用 netty 网络库为游戏客户端构建了一个登录服务器。
该游戏客户端喜欢在单个缓冲区中发送多个数据包,这会带来问题;这个问题是在 netty 解码类中,它只能返回一条消息。
那么我不可能将多个数据包读入多个消息并在一个解码方法调用中返回它们。
我的问题是:我应该如何最好地在一个 DecoderClass.decode() 方法调用中接收多个数据包?由于我只能返回一个对象,我很困惑。
我的初步解码课程如下:
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
我希望我提供了足够的信息,以便有人能够充分理解我的问题
谢谢,
比利