Netty问题总结

1. 在handler中的messageReceived方法里,使用super.handleUpstream(ChannelHandlerContext, MessageEvent);需要注意会产生死循环

2.  Netty中的消息传递,都必须以字节的形式,以ChannelBuffer为载体传递。简单的说,就是你想直接写个字符串过去,对不起,抛异常。虽然,Netty定义的writer的接口参数是Object的,这可能也是会给新上手的朋友容易造成误会的地方。Netty源码中,是这样判断的:

SendBuffer acquire(Object message) {
        if (message instanceof ChannelBuffer) {
            return acquire((ChannelBuffer) message);
        } else if (message instanceof FileRegion) {
            return acquire((FileRegion) message);
        }
 
        throw new IllegalArgumentException(
                "unsupported message type: " + message.getClass());
    }

因此要发送消息的写法为:

 ChannelBuffer buffer = ChannelBuffers.buffer(msg.length()*2);
 buffer.writeBytes(msg.getBytes());
 e.getChannel().write(buffer);


你可能感兴趣的:(Netty问题总结)