前段时间整合websocket时,发现一个问题,客户端推送消息,服务器时而收到时而收不到,并且不抛异常,问题让我百思不得其解。后来仔细排查,当把图片转换为十六进制字节再发送到服务器时,服务器便收不到消息了,传输其他文本正常如初。此时情不自禁联系到,是否消息过长导致服务器接收不到呢。
后来设置了tomcat的缓存大小,问题依然存在。然后测试了一下用ajax传输图片十六进制字节到后台,奇怪的是后台服务器能够正常接收,那为什么websocket传输就有问题了呢,此时猜想,问题肯定出在websocket身上。
后来上网查找websocket内存的资料,相关的信息并不多,最后咨询了一个做通讯的朋友,原来,服务器的websocket接收缓存不足时,websocket会自行断开后重新连接,因此服务器需要调整缓冲区大小。得知答案,现在与大家分享。
对策:
我们只需要在web.xml配置文件中设置缓冲区大小即可:
<!-- 该属性设置缓冲区大小,默认是8192bytes(8KB),自己设置时以字节为单位-->
<context-param>
<param-name>org.apache.tomcat.websocket.textBufferSize</param-name>
<param-value>5242800</param-value>
</context-param>