websock报错:The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for caller

网上看到了一些关于这个错误的产生场景

参考:场景:使用websocket遇到的一个小问题 The remote endpoint was in state [TEXT_PARTIAL_WRITING] which is an invalid stat

我这里产生错误的场景是不同的,记录一下

背景

提供websocket服务的公司,其内部的系统已经与websocket server建立了长连接,图中的nginx是一个出口网关,其运维要求是出口网关与上游服务是不能建立长连接的。

而我们作为外部公司,希望使用其长连接服务,显然长连接是建立不起来了

方案

我们使用java开发websocket client,由于其不支持长连接,我们就采用了轮询的方式,每隔30s通过http upgrade来拉取一次数据

使用了@ClientEndpoint注解

伪代码

// 提供启动的时候 与nginx建立长连接// 在onMessage方法中 每次发送http请求 获取的结果落库

这样做,在于nginx的长连接中不断发送http请求,是OK的

问题

问题是:在某些情况下会报错

[ ERROR] [2020-07-06 01:45:34] [WebSocketClient-AsyncIO-1] org.apache.tomcat.websocket.pojo.PojoEndpointBase [175] - No error handling configured for [xxx] and the following error occurred
java.io.IOException: java.util.concurrent.ExecutionException: java.io.IOException: 断开的管道

之后30秒报错

[ ERROR] [2020-07-04 15:41:42] [WebSocketClient-AsyncIO-1] org.apache.tomcat.websocket.pojo.PojoEndpointBase [175] - No error handling configured for [xxx] and the following error occurred
java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method

通过这个错误,可能得出两个结论

1. 当websocket server与client之间的socket断开(broken pipe)之后,在长连接上根据session继续发送http请求会报错

java.lang.IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method

2. No error handling configured for 的原因是:没有配置@onError注解来处理

解决方案

是不是可以在onError这里重新建立一个新的socket连接呢?经过测试,这种方式是不行的,因为这样会导致前一个连接没有关闭,后面又建立了一个连接,导致多个端口对同一个remote endpoint建立连接

代码参考:

    @OnErrorpublic void onError(Session session, Throwable t) {logger.error(CommonUtil.exceptionToString(t));/*** 解决websocket服务器断开socket 导致@ClientEndPoint生成的WebScoket-AsyncIO线程退出的问题* 这里再次建立socket连接*/WebSocketContainer container;try {container = ContainerProvider.getWebSocketContainer();URI r = URI.create(Const.SMK_WEBSOCKET_ADDRESS_PREFIX + Const.SMK_CENTER_MODULE);session = container.connectToServer(this.getClass(), r);} catch (DeploymentException | IOException ex) {logger.error(CommonUtil.exceptionToString(ex));}}

应该在onClose方法中建立一个新的socket连接

    @OnClosepublic void onClose(Session session, CloseReason reason) {logger.warn("closing session => {} - {}", session, reason);/*** 解决websocket服务器断开socket 导致@ClientEndPoint生成的WebScoket-AsyncIO线程退出的问题* 这里再次建立socket连接*/try {new Thread(new SmkCenterRunnable(), "smk-center-java-websocket-client").start();} catch (Exception e) {logger.error(CommonUtil.exceptionToString(e));}}

经过测试,大部分场景下其会重新建立其websocket连接。但是也存在失败的情况,后续可以加入retry策略,采用一个定时器,每隔1分钟,2分钟,4分钟...以及重试次数来尝试重新建立连接

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经元模型简单制作方法,神经元的简单模型图解

神经元结构图示 (1)由图一可知,图一结构中涉及到3个神经元,含有2个突触,其中A是轴突(神经纤维),B是树突. (2)图二中①是感受器、②是传入神经、③…

HH神经元模型

1、HH神经元的电路图。 电池表示特定离子的平衡电势,电阻器反映通道对特定离子的渗透性。 电容代表的就是细胞膜,存储电荷,起到了电容的作用。 在这个公式中IL代表的是泄露电流,图中它的电路中就是一个电阻R和一个电源的分路&…

神经网络输出层多个神经元

由于matlab升级,已经不能想以前一样直接在newff函数里面规定好隐含层多少个,或者几层,还可以有多个神经元的输出层。改版后需要输出层变成矩阵的形式,神经网络工具箱可以自动识别输出层有几个神经元。详细代码如何下: …

训练神经网络用什么显卡,cpu可以训练神经网络吗

gpu构架为什么更适合发展神经网络 因为神经网络这种大范围多任务的简单运算来说,正好符合GPU这种多核架构,比如你CPU20核心,同时处理20个任务。但是神经网络可能有20000个任务(比喻)。 但最近比较有代表性的GPU-Nvid…

单个神经元

先来看一下单个神经元网络模型: 其中 xi 表示输入,wi 和 b 表示参数。图中下方的公式是 1 函数的模型,嗯,就是一个线性模型。那么就这么一个简单的线性模型怎么仿真出人类神经元那么复杂的玩意儿呢?一个线性模型当然满…

人工神经元模型及常见激活函数

人工神经元模型 生物学上神经元通常由细胞体,细胞核,树突和轴突构成。 树突用来接收其他神经元传导过来的信号,一个神经元有多个树突; 细胞核是神经元中的核心模块,用来处理所有的传入信号; 轴突是输出信…

神经元是个啥子

空间平面的方程 这是一个似曾相识的方程👇 b ∑ n 1 N x n θ n i n 0 b\sum_{n1}^Nx_n\theta_n\bm{i}_n0 bn1∑N​xn​θn​in​0 没错,它描述了空间中的一个平面。其关于每一个坐标轴都有斜率 θ i \theta_i θi​,而 i n 为 这 个 轴…

神经网络的神经元个数,神经网络每层单元数

1、请问如何确定神经网络控制中网络层数和每层神经元个数 你使用的什么神经网络?如果是RBF神经网络,那么只有3层,输入层,隐含层和输出层。确定神经元个数的方法有K-means,ROLS等算法。 谷歌人工智能写作项目:小发猫 …

LSTM中神经元的个数

在初学RNN\LSTM时,经常将其与CNN进行类比,从而会思考LSTM中的神经元的个数。 然而循环神经网络与卷积神经网络差异很大,个人建议不进行类比,概念容易混淆。 其次来解释RNN\LSTM中神经元的个数。 这张在RNN中广为流传的神图&…

一个神经网络有多少个神经元?

引言 神经网络是机器学习的一个迷人的领域,但是它们有时很难优化和解释。事实上,它们有几个超参数。要优化的最常见的超参数是隐藏层中的神经元数量。让我们看看如何为我们的数据集找到一个神经网络的最佳神经元数量。 什么是神经网络? 神经网…

人体中数量最多的神经元,人体内有多少个神经元

人体的神经细胞到底有多少个? 谷歌人工智能写作项目:神经网络伪原创 人体内平均有多少神经元? 写作猫。 约含有140亿个神经元胞体虽然神经元形态与功能多种多样,但结构上大致都可分成胞体(cellbody,orsoma&#xff…

人体的神经元有多少个,人体的神经元有多少支

人体内平均有多少神经元? 。 约含有140亿个神经元胞体虽然神经元形态与功能多种多样,但结构上大致都可分成胞体(cellbody,orsoma)和突起(neurite)两部分.突起又分树突(dendrite)和…

HICE第四天笔记 12月8日

第四天 12月8号 TCP和UDP 的区别 1,TCP是面向连接的协议,UDP是无连接的协议 2,TCP协议传输是可靠的,UDP协议传输“尽力而为” 3,TCP可以进行流控,UDP不行 4,TCP可以进行分段,UDP不行…

微信每日早安推送 Windows版

应诸多网友要求,这次上一个windows版的。 使用方法就是双击打开,立即就会推送一次。需要定时执行,可以使用windows的 任务计划程序 实现。帮大家百度好了 windows如何定时运行程序https://jingyan.baidu.com/article/7c6fb428334a49c1642c90e…

AutoGPT太火了,无需人类插手自主完成任务,GitHub2.7万星!

机器之心报道 编辑:杜伟、陈萍 OpenAI 的 Andrej Karpathy 都大力宣传,认为 AutoGPT 是 prompt 工程的下一个前沿。 近日,AI 界貌似出现了一种新的趋势:自主人工智能。 这不是空穴来风,最近一个名为 AutoGPT 的研究开始…

【人工智能】大模型平台新贵——文心千帆

个人主页:【😊个人主页】 🌞热爱编程,热爱生活🌞 文章目录 前言大模型平台文心千帆发布会推理能力模型微调 作用 前言 在不久的之前我们曾讨论过在ChatGPT爆火的大环境下,百度推出的“中国版ChatGPT”—文…

你如何看待百度的文心一言ERNIE Bot?心有所系,言出必行。

心有所系,言出必行。 排队中。。。 文心一言 百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。 文心一言&#x…

post请求发送几次?

http请求这个问题在面试中可谓是三天两头的出现,好多人对这道题都是屡试不爽,倒背如流的就可以将get和post的区别如数家珍的娓娓道来! 如下图 上图来自 w3schools 我相信当面试官问这道题的时候你心里肯定是乐开花了,正中下怀的感觉&…

一个页面同时请求多个接口,超过6个请求之后,stallled时间过长

Network Timing 使用Chrome浏览器请求多个接口时发现前面的请求Network Timing中stalled时间明显较短,到第四个请求时stalled时间开始加长,超过6个请求之后,stallled时间过长,导致接口整体请求时间变长,页面渲染变慢。…