【发布时间】:2018-01-29 13:16:03
【问题描述】:
最后,我的 websocket 客户端连接到端点,但我无法提取消息负载。 我可以获取标头,但无法识别有效负载。
我的 WebSocket 客户端如下所示:
WebSocketTransport webSocketTransport = new WebSocketTransport(standardWebSocketClient);
SockJsClient sockJsClient = new SockJsClient(Arrays.asList(webSocketTransport));
WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
stompClient.setMessageConverter(new StringMessageConverter());
StompSessionHandler sessionHandler = new MyStompSessionHandler();
ListenableFuture<StompSession> connect = stompClient.connect(URL, sessionHandler);
StompSession stompSession = connect.get();
System.out.println("sessionId: " + stompSession.getSessionId());
String path = "/queue/orders";
stompSession.subscribe(path, new MySimpleStompFrameHandler());
单脚帧处理程序:
private class MySimpleStompFrameHandler implements StompFrameHandler {
@Override
public Type getPayloadType(StompHeaders stompHeaders) {
System.out.println("Headers " + stompHeaders.toString());
return String.class;
}
@Override
public void handleFrame(StompHeaders stompHeaders, Object payload) {
System.out.println("Msg " + payload.toString());
completableFuture.complete(payload.toString());
}
}
我在终端中写入了标题,但 handleFrame 方法没有任何内容。 有什么想法吗?
编辑: 调试后我发现问题出在 DefaultStompSession 类中,它使用了我的 frameHandler 实现
private void invokeHandler(StompFrameHandler handler, Message<byte[]> message, StompHeaders stompHeaders) {
if (message.getPayload().length == 0) {
handler.handleFrame(stompHeaders, null);
return;
}
Type type = handler.getPayloadType(stompHeaders);
Class<?> payloadType = ResolvableType.forType(type).resolve();
Object object = getMessageConverter().fromMessage(message, payloadType);
if (object == null) {
throw new MessageConversionException("No suitable converter, payloadType=" + payloadType +
", handlerType=" + handler.getClass());
}
handler.handleFrame(stompHeaders, object);
}
问题在这一行之后Type type = handler.getPayloadType(stompHeaders); 之后没有执行任何其他操作,我的程序刚刚结束,因此甚至不执行handleFrame()。
那里有什么问题?也许从 getPayloadType 返回的类型 - 我选择字符串,因为我认为每条消息都可以呈现为字符串。
【问题讨论】:
-
仍在努力解决这个问题。有什么想法吗?
标签: java websocket spring-websocket