使用Java构建的基于Spring的消息代理的Stomp WebSocket客户端失败了。

3
我有一个用Java(基于Spring)构建的Websocket Stomp服务器。我的JavaScript客户端能够使用Stomp over Web Socket与服务器通信,没有问题。
我正在尝试使用WebSocket4Net库构建C#客户端。请问有谁能告诉我如何将Stomp消息帧构建为bytes[]并发送到服务器?
OnOpen()方法中,我正在执行以下操作:
String stompMsg = "CONNECT\n";
stompMsg += "accept-version:1.1,1.2\n\n";
stompMsg += "^@";

Byte[] bytesToSend = Encoding.UTF8.GetBytes(stompMsg);
websocketObj.Send(bytesToSend, 0, bytesToSend.Length);

我从服务器收到以下消息:
无法解析二进制消息有效载荷-java.nio.HeapByteBuffer。向客户端发送STOMP错误。
java.lang.IllegalArgumentException:类 [org.springframework.web.socket.BinaryMessage] 的对象必须是类 org.springframework.web.socket.TextMessage 的实例 在 org.springframework.util.Assert.isInstanceOf(Assert.java:339) 在 org.springframework.util.Assert.isInstanceOf(Assert.java:319) 在 org.springframework.web.socket.messaging.StompSubProtocolHandler.handleMessageFromClient(StompSubProtocolHandler.java:189) 在 org.springframework.web.socket.messaging.SubProtocolWebSocketHandler.handleMessage(SubProtocolWebSocketHandler.java:307) 在 org.springframework.web.socket.handler.WebSocketHandlerDecorator.handleMessage(WebSocketHandlerDecorator.java:75) 在 org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator.handleMessage(LoggingWebSocketHandlerDecorator.java:55) 在 org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator.handleMessage(ExceptionWebSocketHandlerDecorator.java:71) 在 org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleBinaryMessage(StandardWebSocketHandlerAdapter.java:122) 在 org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.access$100(StandardWebSocketHandlerAdapter.java:42) 在 org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$4.onMessage(StandardWebSocketHandlerAdapter.java:88) 在 org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter$4.onMessage(StandardWebSocketHandlerAdapter.java:85) 在 org.apache.tomcat.websocket.WsFrameBase.sendMessageBinary(WsFrameBase.java:549) 在 org.apache.tomcat.websocket.WsFrameBase.processDataBinary(WsFrameBase.java:514) 在 org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:274) 在 org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:116) 在 org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:54) 在 org.apache.tomcat.websocket.server.WsHttpUpgradeHandler$WsReadListener.onDataAvailable(WsHttpUpgradeHandler.java:192) 在 org.apache.coyote.http11.upgrade.AbstractServletInputStream.onDataAvailable(AbstractServletInputStream.java:178) 在 org.apache.coyote.http11.upgrade.AbstractProcessor.upgradeDispatch(AbstractProcessor.java:92) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:601) 在 org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2430) 在 org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2419) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:744)
请问有人能建议是否成功创建/使用了任何基于Spring的STOMP over Web Socket服务器的C#客户端库吗?

你的 ^@ 是指 new byte[0] 吗?其他都看起来不错。我们测试的样例是:CONNECT\naccept-version:1.2\nhost:github.org\n\n0 - Artem Bilan
谢谢,是的,我猜我在那里犯了个错误。我现在按照你测试的示例进行了更改。但是我的服务器仍然以相同的信息响应。我还添加了一些关于服务器日志中堆栈跟踪的信息。 - user4497170
啊!我现在明白了。是的,Spring STOMP仅支持TextMessage。你能否使用websocketObj发送TextMessage - Artem Bilan
@ArtemBilan 谢谢!\0 真的很有帮助! - user4497170
1个回答

1

@Artem - 非常感谢您。\0确实解决了问题。

websocket.Send("SUBSCRIBE\nid:sub-0\ndestination:/topic/mytopic\n\n\0");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接