springboot websocket server无法接收二进制消息数据问题一例

用java编程真的是在天上飞的感觉,写点服务器端代码时真省事啊,可是出了问题是真不好排查啊。特简单一websocket server,可以触发onOpen,onClose,甚至接收文本消息的onMessage也能触发执行,但是就是针对二进制的onMessage说啥也收不到数据,尝试换了各种姿势,也不报错,也收不到数据,最后翻看其他人的博客发现说默认java的websocket server最多只能接收8k的二进制数据,想收到数据调大配置参数就可以了,乖乖,加上配置以后果然能收到数据了,配置如下:

package com.xxx.slientprint;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.util.WebAppRootListener;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class WebAppRootContext implements ServletContextInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.addListener(WebAppRootListener.class);
        //这里设置了30兆的缓冲区
        //Tomcat每次请求过来时在创建session时都会把这个webSocketContainer作为参数传进去所以对所有的session都生效了
        servletContext.setInitParameter("org.apache.tomcat.websocket.textBufferSize","30000000");
        servletContext.setInitParameter("org.apache.tomcat.websocket.binaryBufferSize","30000000");
    }
}

咱不说别的,大哥你限制了接收buffer大小你倒是说一声啊,配了slf4j也啥都不输出,真坑人啊。


版权声明:本文为peihexian原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。