首页 > 解决方案 > 使用 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)

标签: spring-bootwebsocketspring-websocketjava-websocket

解决方案


推荐阅读