websocket 发送的消息超过默认限制就会自动断开连接

news2024/11/13 9:47:24

springboot集成websocket需要三步:

  • 添加依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
            <version>2.1.6.RELEASE</version>
        </dependency>

 添加配置类

@Configuration
@EnableWebSocket
public class WebSocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpoint() {
        return new ServerEndpointExporter();
    }

}

 添加Websocket监听类

@ServerEndpoint("/webSocket")
@Component
public class WebSocketServer {
    private static AtomicInteger onlineNum = new AtomicInteger();

    private static ConcurrentHashMap<String, Session> sessionPools = new ConcurrentHashMap<>();

    //发送消息
    public void sendMessage(Session session, String message) throws IOException {
        if(session != null){
            synchronized (session) {
                System.out.println("发送数据:" + message);
                session.getBasicRemote().sendText(message);
            }
        }
    }

    //建立连接成功调用
    @OnOpen
    public void onOpen(Session session){
        addOnlineCount();
        System.out.println("加入webSocket!当前人数为" + onlineNum);
        // 广播上线消息
    }

    //关闭连接时调用
    @OnClose
    public void onClose(){
        subOnlineCount();
        System.out.println("断开webSocket连接!当前人数为" + onlineNum);
    }

    //收到客户端信息
    @OnMessage
    public void onMessage(String message) throws IOException{
        System.out.println("server get" + message);
    }

    //错误时调用
    @OnError
    public void onError(Session session, Throwable throwable){
        System.out.println("发生错误");
        throwable.printStackTrace();
    }

    public static void addOnlineCount(){
        onlineNum.incrementAndGet();
    }

    public static void subOnlineCount() {
        onlineNum.decrementAndGet();
    }

    public static AtomicInteger getOnlineNumber() {
        return onlineNum;
    }

    public static ConcurrentHashMap<String, Session> getSessionPools() {
        return sessionPools;
    }
}

用websocket在线测试验证:

websocket在线测试

 控制台接受消息:

 当发送一个超长的文本内容时(超过8kb)出现了以下问题:

 

 发现断开了连接!

接下来我们只需要配置两个参数即可解决:

改造原来的配置类:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements ServletContextInitializer {

    @Bean
    public ServerEndpointExporter serverEndpoint() {
        return new ServerEndpointExporter();
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.addListener(WebAppRootListener.class);
        servletContext.setInitParameter("org.apache.tomcat.websocket.textBufferSize","52428800");
        servletContext.setInitParameter("org.apache.tomcat.websocket.binaryBufferSize","52428800");
    }
}

配置org.apache.tomcat.websocket.textBufferSize、org.apache.tomcat.websocket.binaryBufferSize 的值为50M,再进行尝试,success!

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GIT】Git常用命令学习

Git常用命令学习 说明&#xff1a;<>表示占位符的说明&#xff0c;[]表示可选&#xff0c;/表示“或” 仓库操作 初始化创建一个本地仓库 git init克隆远程仓库至本地 git clone <远程仓库地址> [仓库名称] #可以加上自定义仓库名称配置仓库 git config user.name…

Linux的动静态库

动静态库 1. 见一见动静态库2. 动静态库概念2.1 为什么要有动静态库2.2 定义 3. 写一写——库的设计角度打包成静态库打包成动态库 4. 用一用——使用者角度4.1 直接使用头文件和源文件&#xff08;直接给源代码&#xff09;4.2 得到头文件和源文件进过处理后形成的二进制文件.…

C++ - 20230703

一. 思维导图 二.练习 全局变量&#xff0c;int monster 10000;定义英雄类hero&#xff0c;受保护的属性string name&#xff0c;int hp,int attck&#xff1b;公有的无参构造&#xff0c;有参构造&#xff0c;虚成员函数 void Atk(){blood-0;}&#xff0c;法师类继承自英雄类…

SpringCloud:微服务技术

一、认识微服务&#xff1a; 首先&#xff0c;微服务架构不等于SpringCloud&#xff0c;微服务架构是一种经过良好架构设计的分布式架构方案&#xff0c; &#xff0c;它将应用构建成一系列按业务领域划分模块的&#xff0c;小的自治服务&#xff0c;并解决服务拆分所产生的各种…

css基础知识十五:如果要做优化,CSS提高性能的方法有哪些?

一、前言 每一个网页都离不开css&#xff0c;但是很多人又认为&#xff0c;css主要是用来完成页面布局的&#xff0c;像一些细节或者优化&#xff0c;就不需要怎么考虑&#xff0c;实际上这种想法是不正确的 作为页面渲染和内容展现的重要环节&#xff0c;css影响着用户对整个…

DL环境安装之GCC9,Python9与IDE连接远程环境:python notebook,解释器,C toolchain

文章目录 一.安装gcc91. 设置x86 centos7 yum源2. 编译安装 二、安装python3.91.前置依赖2. 编译安装3.建立软连接或环境变量 三、IDE连接远程环境1.IDE 远程notebook2.IDE 远程Python解释器3.远程toolchain &#xff08;后续可能有用&#xff09; 一.安装gcc9 系统自带的cc可…

2023亚马逊云科技中国峰会——Amazon DeepRacer

1.DeepRacer技术背景 早在20世纪初汽车问世之时&#xff0c;发明家们便已提出无人驾驶的设想。但即便是实现无人驾驶的初级阶段&#xff0c;也经历了足足百年时间。毕竟在复杂的城市路况下&#xff0c;机器若想像人一样实现感知、决策、控制等功能&#xff0c;必定面临各种复杂…

Simulink仿真模块 - Product

Product:标量和非标量的乘除运算或者矩阵的乘法和逆运算 库:Simulink / Commonly Used Blocks Simulink / Math Operations HDL Coder / Commonly Used Blocks HDL Coder / HDL Floating Point Operations HDL Coder / Math Operations 模型为: 双击模型打开参数设置界面为…

静电测试仪如何在生产中帮助我们

静电测试仪在生产中可以帮助我们进行静电防护和质量控制。以下是它在生产中的具体帮助&#xff1a; 1. 静电防护&#xff1a;静电测试仪可以用来测量物体表面的静电电荷&#xff0c;通过监测静电电荷的大小和分布情况&#xff0c;预防静电产生和积累&#xff0c;降低产品受到静…

如何快速构建一个交互式的JavaScript UI仪表板?用DHTMLX很简单!

DHTMLX Suite包含了超过20个UI小部件&#xff0c;可以帮助开发功能齐全的Web应用程序。例如&#xff0c;开发者可以创建一个全面的仪表板来可视化和监控票务系统的性能。 在本文这个JavaScript仪表板教程中&#xff0c;我们将介绍如何在DHTMLX Suite UI小部件和Optimus微框架的…

Android性能优化-数据结构

本文链接&#xff1a;Android性能优化-数据结构_猎羽的博客-CSDN博客 云笔记链接&#xff1a;https://note.youdao.com/s/84OhDByE

SysML建模示例水蒸馏器图形大全(从图16.1到图16.30)EA从零开始复刻

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集

图像聚类算法

什么是分类 分类 分类其实是从特定的数据中挖掘模式&#xff0c;作出判断的过程。 分类学习主要过程&#xff1a; &#xff08;1&#xff09;训练数据集存在一个类标记号&#xff0c;判断它是正向数据集&#xff08;起积极作用&#xff0c;不是垃圾短信&#xff09;&#xf…

C++与JAVA中迭代器的不同

1.C迭代器 #include <iostream> #include <vector> using namespace std;int main() {vector<int> vec;for(int i 0; i < 10; i) vec.push_back(i);for(std::vector<int>::iterator it vec.begin(); it ! vec.end(); it) {cout << "…

以太网常见设备(五)

目录 一、网卡 二、中继器 三、集线器 四、网桥 五、2层交换机 六、路由器 七、网关 一、网卡 网卡&#xff0c;全称网络接口卡&#xff0c;有时也叫做网络适配器、网卡、LAN卡。是计算机连接网络的接口。 二、中继器 中继器是OSI模型第1层物理层面上延长网络的设备。其…

pdf怎样转换成ppt格式?分享简单快捷的方法!

PDF和PPT是两种常见的文件格式&#xff0c;它们在使用场景上有所不同。PDF适合单独阅读和查看&#xff0c;而PPT则更适合在多人演讲时进行演示。有时候我们需要将PDF文件转换为PPT格式&#xff0c;以便进行演示、分享或修改。这在教育培训行业尤其常见&#xff0c;教师经常需要…

01-基础入门-概念名词

基础入门-概念名词 基础入门-概念名词1、域名&#xff08;1&#xff09;什么是域名&#xff08;2&#xff09;在哪里注册域名&#xff08;3&#xff09;二级域名和多级域名&#xff08;4&#xff09;域名对安全测试的意义 2、DNS&#xff08;1&#xff09;什么是DNS&#xff08…

常用开发功能——批量文件导出

某天工作接到一个需求&#xff1a;批量导出场站的订单信息&#xff0c;一个场站一个Excel文档&#xff1b; 与单个文件导出的区别在于&#xff0c;单个导出一次性只导出一个文件&#xff0c;在输出流中写入这一个文件即可&#xff0c;那么如何一次性导出多个文件&#xff1f;难…

茶叶小程序怎么做

茶叶小程序商城是一个专为茶叶爱好者打造的购物平台&#xff0c;提供了一系列便利的功能&#xff0c;使用户能够轻松选购适合自己口味的优质茶叶。以下是该小程序商城的主要功能介绍&#xff1a; 1. 商品展示&#xff1a;在茶叶小程序商城中&#xff0c;用户可以浏览各种各样的…

点云滤波Filtering

直通滤波 就是设置一个x、y、z方向的一个取值范围&#xff0c;以过滤掉明显不在测试距离范围的点云&#xff1b;使用Intel RealSense或者激光雷达采集的数据&#xff0c;可设置一个x,y,z合理的范围&#xff0c;过滤掉我们不需要的点云。 pcl::PassThrough 是点云库&#xff08;…