使用Websocket传输内容过长被Tomcat直接舍弃的问题

技术渣 2022年07月27日

发现

场景:使用WebSocket传输长JSON时,数据没有经过业务,直接触发WebSocket的OnClose方法。经测试,是传输数据过长导致,且不会提示任何错误。

传输大数据,如图片音频的base64编码,也容易遇到这个问题。

解决

解决方法有两种:

web.xml:

<context-param>
<param-name>org.apache.tomcat.websocket.textBufferSize</param-name>
<param-value>10000000</param-value>
</context-param>

SpringBoot工程:

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class TomcatConfg implements ServletContextInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        System.out.println("org.apache.tomcat.websocket.textBufferSize");
        servletContext.addListener(WebAppRootListener.class);
        servletContext.setInitParameter("org.apache.tomcat.websocket.textBufferSize","1024000");
    }
 
}