spring-boot - 使用 sprint-boot 的 web-socket 反向代理因错误 text_partial_writing 断开连接
问题描述
我正在使用这个web-proxy代码使用 spring-boot 进行反向 websocket 代理,它在初始连接期间工作,之后我得到以下错误
java.lang.illegalstateexception: the remote endpoint was in state [text_partial_writing] which is an invalid state for called method at
org.apache.tomcat.websocket.wsremoteendpointimplbase$statemachine.checkstate(wsremoteendpointimplbase.java:1234) at org.apache.tomcat.websocket.wsremoteendpointimplbase$statemachine.textpartialstart(wsremoteendpointimplbase.java:1191) at org.apache.tomcat.websocket.wsremoteendpointimplbase.sendpartialstring(wsremoteendpointimplbase.java:222) at org.apache.tomcat.websocket.wsremoteendpointbasic.sendtext(wsremoteendpointbasic.java:49) at org.springframework.web.socket.adapter.standard.standardwebsocketsession.sendtextmessage(standardwebsocketsession.java:215) at org.springframework.web.socket.adapter.abstractwebsocketsession.sendmessage(abstractwebsocketsession.java:106) at com.javainuse.websocket.config.nexthop.sendmessagetonexthop(nexthop.java:61) at com.javainuse.websocket.config.websocketproxyserverhandler.handlemessage(websocketproxyserverhandler.java:33) at org.springframework.web.socket.handler.websockethandlerdecorator.handlemessage(websockethandlerdecorator.java:75) at org.springframework.web.socket.handler.loggingwebsockethandlerdecorator.handlemessage(loggingwebsockethandlerdecorator.java:56) at org.springframework.web.socket.handler.exceptionwebsockethandlerdecorator.handlemessage(exceptionwebsockethandlerdecorator.java:58) at org.springframework.web.socket.adapter.standard.standardwebsockethandleradapter.handletextmessage(standardwebsockethandleradapter.java:114) at org.springframework.web.socket.adapter.standard.standardwebsockethandleradapter.access$000(standardwebsockethandleradapter.java:43) at org.springframework.web.socket.adapter.standard.standardwebsockethandleradapter$3.onmessage(standardwebsockethandleradapter.java:85) at org.springframework.web.socket.adapter.standard.standardwebsockethandleradapter$3.onmessage(standardwebsockethandleradapter.java:82) at org.apache.tomcat.websocket.wsframebase.sendmessagetext(wsframebase.java:395) at org.apache.tomcat.websocket.server.wsframeserver.sendmessagetext(wsframeserver.java:119) at org.apache.tomcat.websocket.wsframebase.processdatatext(wsframebase.java:495) at org.apache.tomcat.websocket.wsframebase.processdata(wsframebase.java:294) at org.apache.tomcat.websocket.wsframebase.processinputbuffer(wsframebase.java:133) at org.apache.tomcat.websocket.server.wsframeserver.ondataavailable(wsframeserver.java:82) at org.apache.tomcat.websocket.server.wsframeserver.doondataavailable(wsframeserver.java:171) at org.apache.tomcat.websocket.server.wsframeserver.notifydataavailable(wsframeserver.java:151) at org.apache.tomcat.websocket.server.wshttpupgradehandler.upgradedispatch(wshttpupgradehandler.java:148) at org.apache.coyote.http11.upgrade.upgradeprocessorinternal.dispatch(upgradeprocessorinternal.java:54) at org.apache.coyote.abstractprocessorlight.process(abstractprocessorlight.java:59) at org.apache.coyote.abstractprotocol$connectionhandler.process(abstractprotocol.java:868) at org.apache.tomcat.util.net.nioendpoint$socketprocessor.dorun(nioendpoint.java:1590) at org.apache.tomcat.util.net.socketprocessorbase.run(socketprocessorbase.java:49) at java.base/java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1128) at java.base/java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:628) at org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61) at java.base/java.lang.thread.run(thread.java:834)
我在此处为 sendMessage添加了同步块,但在此行仍然出现相同的错误
是否有其他 java websocket 代理代码?
我尝试使用 spring-cloud-gateway 但它与 spring-starter-web 不兼容(由于代码中的 spring MVC 依赖性,我无法删除 web)
解决方案
推荐阅读
- flutter - 在颤振中,当我添加图片的 URL 时,asset.network() 不起作用,手机什么也没显示
- c# - Visual Studio 自动在本地文件夹中创建枚举文件
- dictionary - Vim E78 未知标记。当我试图映射
- swift - 我想用 Swift 写这行代码
- java - 是否可以在java中自动创建线程?取决于标准
- swift - 如何将 View 放在 SwiftUI 中的所有其他视图之上
- snowflake-cloud-data-platform - 在雪花任务中执行多行
- java - 订阅者如何控制具有反应性拉回压力的发布者?
- c++ - 与一个包含事件的线程并行执行两个线程
- javascript - 将 :focus CSS 应用于 shadowDOM 中的输入字段,并将 :focus CSS 应用于影子主机