某群友提出一个关于netty的问题。服务端他这么写的
服务端
是想通过Result的泛型来定位哪一个SimpleChannelInboundHandler处理。
客户端是这么写的
客户端
可以看到,客户端发送的Doctor对象。
结果本希望是输出 “Doctor 读取到数据啦 + result”,但是结果如下:
就有疑问了,遂debug:
明明是Doctor类型,却进到new SimpleChannelInboundHandler<Result<User>>里。
跟下源码...
可以看到,先调用acceptInboundMessage判断类型是否匹配,匹配才进入channelRead0,不匹配就进入下一个InboudHandler。所以,netty会判断msg是否匹配Result类型,很明显是匹配的,就进入了泛型为User的InboudHandler里。
怎么解决呢?acceptInboundMessage是public类型(netty已经考虑到这种情况),我们只需要创建SimpleChannelInboundHandler的时候重写一下acceptInboundMessage就ok了。改动如下
重写acceptInboundMessage
输出结果
输出结果
搞定。