【发布时间】:2015-05-27 17:40:42
【问题描述】:
根据 (Is it possible to send binary data with STOMP over WebSockets using Spring-WebSockets?) 看来,应该可以通过 websocket 使用 STOMP 发送二进制消息。
我已将 WebSocketStompClient 配置如下:
List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport( new StandardWebSocketClient()) );
WebSocketClient transport = new SockJsClient(transports);
WebSocketStompClient stompClient = new WebSocketStompClient(transport);
// using a custom converter to serialize java object to byte[]
stompClient.setMessageConverter( new SerializedJavaObjectMessageConverter() );
我正在使用以下方式发送消息:
StompHeaders stompHeaders = new StompHeaders();
stompHeaders.setDestination( "/app/greetings");
stompHeaders.setContentType( MimeTypeUtils.APPLICATION_OCTET_STREAM );
session.send(stompHeaders, new Greeting( message ));
我收到以下断言的异常:
Assert.isInstanceOf(TextMessage.class, message, this + " supports text messages only.");
在 org.springframework.web.socket.sockjs.client.AbstractClientSockJs(下)中找到,它似乎只支持 TextMessage:
@Override
public final void sendMessage(WebSocketMessage<?> message) throws IOException {
Assert.state(State.OPEN.equals(this.state), this + " is not open, current state=" + this.state);
Assert.isInstanceOf(TextMessage.class, message, this + " supports text messages only.");
String payload = ((TextMessage) message).getPayload();
payload = getMessageCodec().encode(new String[] { payload });
payload = payload.substring(1); // the client-side doesn't need message framing (letter "a")
message = new TextMessage(payload);
if (logger.isTraceEnabled()) {
logger.trace("Sending message " + message + " in " + this);
}
sendInternal((TextMessage) message);
}
如上配置的新 java 客户端 WebSocketStompClient (4.2-SNAPSHOT) 是否支持发送二进制消息?
更新:
以下客户端配置有效:
WebSocketClient transport = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(transport)
【问题讨论】:
-
你能澄清你的问题吗?
-
@QPaysTaxes - 根据您的评论,我已经改写了这个问题。
-
根据 Rossen Stoyanchev 在jira.spring.io/browse/SPR-12301 上的评论,SockJs 不支持二进制消息 (github.com/sockjs/sockjs-protocol/…)
标签: java spring spring-websocket