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);