很多业务中使用websocket进行前后台的长连接,一般情况下用作及时性消息推送等。
而一旦传输内容过长,例如传输一些图片音频的base64编码之类的,很容易出现过长问题,甚至不提示问题直接截断乃至丢失数据,解决方法如下。
很多人网上查阅方法会发现使用如下措施解决:
就是在web.xml里面加一个配置
<context-param>
<param-name>org.apache.tomcat.websocket.textBufferSize</param-name>
<param-value>10000000</param-value>
</context-param>
对于spring工程来说这个方法没问题可以生效,但是springboot并没有web.xml该如何解决呢?如下:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class WebAppRootContext 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");
}
}
我在使用的时候还发现了一个问题,如上配置假如是以springboot内置tomcat启动是没有问题的,但是打成war后使用外置tomcat运行却不生效,最终发现是因为外置tomcat版本问题,出问题的版本是tomcat8.0.xx,而使用tomcat8.5.xx就没有这个问题了