The remote endpoint was in state [TEXT_FULL_WRITING]

2023-11-15

使用websocket出现的坑

The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method

 

      websocket推送数据的方法有:

               session.getBasicRemote().sendText(message);  //同步发送

               session.getAsyncRemote().sendText(message); //异步发送

经过测试,在高并发的情况下,两种发送方法都会抛出上面的异常。查了很多博客,发现是多个线程同时使用同一session发送的原因。决定做如下修改。

synchronized(session){

    session.getAsyncRemote().sendText(message);

}

经测试异步发送还是会抛出上述异常,同步不会出现。猜想:异步应该是new一个线程去发送,即使使用synchronized同样会出现两个session同时被不同的线程操作的时机。

 

决定使用:

 

synchronized(session){

    session.getBasicRemote().sendText(message);

}

//在网络非常好的情况下。多线程同一个session发送数据

150ms/条的情况下没有出现上述异常

 

建议:上述发送方式虽然不会抛出上述异常,建议在并发量非常高的情况下,尽量单个sesson创建线程去发送。因为在循环session群发的时候,一个session回话网络不好,会出现超时异常,当前线程会因此中断。导致后面的session没有进行发送操作。使用单个线程,单个session情况下避免session之间的相互影响。具体超时异常如下:

java.util.concurrent.TimeoutException: null
        at java.util.concurrent.FutureTask.get(FutureTask.java:205)
        at com.icancontrol.meter.controller.ListMapWebSocket.execute(ListMapWebSocket.java:241)
        at com.icancontrol.meter.controller.ListMapWebSocket.sendMessage(ListMapWebSocket.java:187)
        at com.icancontrol.meter.common.thread.SendThread.run(SendThread.java:40)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

The remote endpoint was in state [TEXT_FULL_WRITING] 的相关文章

随机推荐

  • json转对象

    JSON parseObject方法可以实现json转化为对象 public class Test1 public static void main String args String jsonStr n code 200 n data
  • 机器学习笔试面试超详细总结(四)

    文章目录 151 Ridge回归 Lasso回归 坐标下降法求解 152 电影推荐系统是以下哪些的应用实例 153 决策树是否可以用来聚类 可以 154 什么方法最适合于在n维空间做异常点检测 155 逻辑回归和多元回归分析的不同 156
  • 人工智能芯片发展 (1

    人工智能技术随着以深度学习为核心算法的大力发展 目前已经在场景识别 语音识别等方面迅猛发展 影响人工智能的三大要素 数据 算法 算力 其中算力 是实现算法的重要基础 人工智能芯片也处于这个时代的战略至高点 目前人工智能 芯片分为三类 a A
  • 堆排序(浅谈大顶堆与小顶堆)

    什么是堆 堆是一种非线性结构 本篇随笔主要分析堆的数组实现 可以把堆看作一个数组 也可以被看作一个完全二叉树 通俗来讲堆其实就是利用完全二叉树的结构来维护的一维数组 按照堆的特点可以把堆分为大顶堆和小顶堆 大顶堆 每个结点的值都大于或等于其
  • 5 分钟,教你用 Docker 部署一个 Python 应用

    在使用传统物理机或云服务器上部署项目都会存在一些痛点 比如 项目部署速度慢 资源浪费 迁移难且扩展低 而使用 Docker 部署项目的优势包含 高效利用系统资源 服务启动更快 环境一致 迁移更加方便 本篇文章将介绍 Docker 部署一个
  • Python-Flask 视图和模板(4)

    Flask的response和request对象 一 视图 V 1 response响应对象 2 request请求对象 二 模板 1 返回模板文件 2 重定向 url for 路径反向解析 3 模板的语法 4 过滤器 5 模板复用 6 宏
  • 你们都说淘宝是最难爬的网站了?用我这个方法包你学会!

    导语 文章教程发了蛮多 经常会碰到一个问题 淘宝怎么爬的啊 它反爬机制好难搞啊 能不能出一期教程爬一下淘宝 今天就教大家如何采集淘宝数据并实现数据分析 今天就给大家带来一个淘宝商品数据小爬虫吧 顺便按老规矩把抓取到的数据可视化一波 废话不多
  • 【ABAP系列】SAP DOI技术中I_OI_SPREADSHEET接口的使用

    公众号 SAP Technical 本文作者 matinal 原文出处 http www cnblogs com SAPmatinal 原文链接 ABAP系列 SAP DOI技术中I OI SPREADSHEET接口的使用 前言部分 大家可
  • pb filecopy文件到服务器,怎样在PB中实现文件的拷贝与删除 (转)

    怎样在PB中实现文件的拷贝与删除 转 more 怎样在PB中实现的拷贝与删除 可借助外部 可用函数实现 1 文件拷贝 函数声明 FUNCTION boolean CopyFileA ref string cfrom ref string c
  • ffmpeg webm 提取_ffmpeg简单使用教程 转码、压制、提取、截取、合并、录屏等

    1 查看帮助文档 ffmpeg是一个开源的音视频转码工具 本文是自己学习ffmpeg使用方式的一个笔记 将ffmpeg命令行工具加入环境变量之后 输入ffmpeg h打印帮助文档 PS C Users mudssky Desktop gt
  • CheckStyle 自定义编码规范

    CheckStyle能够帮助程序员检查代码是否符合制定的规范 通过将CheckStyle的检查引入到项目构建中 可以强制让项目中的所有的开发者遵循制定规范 而不是仅仅停留在纸面上 如果发现代码违反了标准 比如类名未以大写开头 单个方法超过了
  • 解决Unity新建脚本时MonoBehaviour无法继承不变绿

    解决Unity新建脚本时MonoBehaviour无法继承不变绿不自动补全 问题 有很多初学开发的小朋友发现下载unity后 在unity新建脚本时发现脚本继承MonoBehaviour是还是灰色的 这是因为你在unity中没有把Visua
  • 数据挖掘导论 复习一(介绍+数据预处理方法+定性归纳)

    数据挖掘 数据库 机器学习 算法 经验 模型 机器学习任务 分类 回归 聚类 KMeans DCSAN 层次聚类 数据降维 数据预处理 常用分类器 KNN 贝叶斯 逻辑回归 决策树 随机森林 本书将介绍数据挖掘与数据库知识发现的基本知识 以
  • 拔电源磁盘变成只读Read-only file system

    拔电源磁盘变成只读Read only file system 问题 查询 解决 问题 搭建openwrt的过程中 由于机器没有关机键 而且没有进行后台命令关机 直接拔电源之后 重启 任何操作都提示只读状态 那么这个时候什么都操作不了 无奈只
  • Consummer<T>函数式接口中的andThen方法

    public static void main String args Consumer
  • 网站页面实现python代码交互,Ajax与Python服务器交互,在网页实现简单的Python3代码的运行...

    说一下大概的思路 python 1 目标 在输入框输入Python3代码 点击运行 右边显示代码结果 服务器 2 步骤 ide 那首先咱们须要一个页面来显示咱们的输入输出 还有一个按钮 spa 而后就是经过点击按钮事件获取输入的内容 用到了
  • java方法参数传递机制

    值传递机制 敲黑板 记重点 如果参数是基本数据类型 此时实参赋给形参的是实参真实储存的数据值 如果参数是引用数据类型 此时实参赋给形参的是实参储存数据的地址值 什么的基本数据类型 如果参数是基本数据类型那么传的是变量的值 例如 int a
  • 姿态估计之3D 人体姿态估计 - 总结(1)【转】

    参考 3D 人体姿态估计简述 知乎 3D人体姿态估计 介绍及论文归纳 2021 CVPR Graph Stacked Hourglass Networks for 3D Human Pose Estimation 2D 3D人体姿态估计 2
  • VS2017+QT5.12.0+VTK8.1.1+PCL1.9.1环境配置

    资源 链接 https pan baidu com s 13hbBWECg2DIMojL9oks8NQ pwd vysx 提取码 vysx 主要流程 VS2017 Qt5 12 0 PCL1 9 1开发环境配置过程详细记录 尚庆龙的博客 C
  • The remote endpoint was in state [TEXT_FULL_WRITING]

    使用websocket出现的坑 The remote endpoint was in state TEXT FULL WRITING which is an invalid state for called method websocket