使用 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 添加了同步块 here,但在 this 行仍然遇到相同的错误

还有其他的java websocket代理代码吗?

我尝试使用 spring-cloud-gateway 但它与 spring-starter-web 不兼容(由于代码中的 spring MVC 依赖,我无法删除 web)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)