用netty搭建的websocket服务器,发现在发送大文件时,引起客户端断线,经看日志,发现发送大文件时,服务器没有发送回应客户端websocket的pong包,导致客户端自动断线。但是如果发送文件时,对于每次发包间隔一定时间,如延迟1毫秒,则不断线.。
之前对netty一知半解,用的代码基本都是网上现成的。经查资料(《Netty进阶之路-跟着案例学Netty(李林锋)》),原来netty开发服务器建议将netty的通道IO线程与业务功能分开,也就是对于业务单独用业务线程来处理,这样能释放netty的IO线程。Netty在处理发送数据时,对于业务线程的数据单独形成数据队列,不影响IO线程自身的数据发送。
在本例中,发送文件使用的是netty的IO线程,结果导致线程被长时间占用,websocket的pong包无法发出。经把发送模块单独放在一个线程里,与IO线程分开,问题解决。