Ich schrieb einen Web-Socket-Server und einen Client mit Feder verwenden und anpassen. Die Codes folgen. Die Codes, die eine Nachricht an den Server senden, funktionieren, aber die Methode sesssion script kann keine Nachricht vom Server empfangen. Ich suche nach vielen Dokumenten und überprüfe meine Codes. Ich weiß nicht warum es nicht funktionieren kann.wie MessageConversion (Frühjahr websocket Client)
Hier ist mein Client-Codes:
public class Test {
public static void main(String[] args) {
Thread thread = new Thread(new WebsocketThread());
thread.start();
Thread.sleep(5000);
}
}
class MyStompSessionHandler extends StompSessionHandlerAdapter {
@Override
public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
session.send("/app/messages", "{'payload3':2222}".getBytes());
session.subscribe("/user/queue/position-updates", new StompFrameHandler() {
@Override
public Type getPayloadType(StompHeaders headers) {
return String.class;
}
@Override
public void handleFrame(StompHeaders headers, Object payload) {
System.out.println("test:" + payload);
}
});
}
}
class WebsocketThread implements Runnable{
@Override
public void run() {
List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
WebSocketClient webSocketClient = new SockJsClient(transports);
WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
String url = "ws://127.0.0.1:8860/orders";
StompSessionHandler sessionHandler = new MyStompSessionHandler();
ListenableFuture<StompSession> future = stompClient.connect(url, sessionHandler);
}
}
Hier ist mein Server-Codes:
@Controller
public class TestController {
@Autowired
private SimpMessagingTemplate simpMessagingTemplate;
@MessageMapping("/messages")
public void sendUserMsg(String messages) throws IOException {
System.out.println("webSocket:" + messages);
simpMessagingTemplate.convertAndSend("/queue/position-updates", "This is return message");
}
}
Es ist Ausnahme:
org.springframework.messaging.converter.MessageConversionException: Nein geeignet Wandler, PayloadType = Klasse java.lang.String, handlerType = class com.example.hello.MyStompSessionHandler bei org.springframework.messaging.simp.stomp.D efaultStompSession.invokeHandler (DefaultStompSession.java:419) bei org.springframework.messaging.simp.stomp.DefaultStompSession.handleMessage (DefaultStompSession.java:373) bei org.springframework.web.socket.messaging.WebSocketStompClient $ WebSocketTcpConnectionHandlerAdapter.handleMessage (WebSocketStompClient.java:342) bei org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.handleMessageFrame (AbstractClientSockJsSession.java:267) bei org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.handleFrame (AbstractClientSockJsSession. Java: 200) bei org.springframework.web.socket.sockjs.client.WebSocketTransport $ ClientSockJsWebSocketHandler.handleTextMessage (WebSocketTransport.java:162) bei org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage (A bstractWebSocketHandler.java:43) bei org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage (StandardWebSocketHandlerAdapter.java:110) bei org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.access $ 000 (StandardWebSocketHandlerAdapter .java: 42) bei org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter $ 3.onMessage (StandardWebSocketHandlerAdapter.java:81) bei org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter $ 3.onMessage (StandardWebSocketHandlerAdapter .java-: 78) bei org.apache.tomcat.websocket.WsFrameBase.sendMessageText (WsFrameBase.java:399) bei org.apache.tomcat.websocket.WsFrameBase.processDataText (WsFrameBase.java:500) bei org.apache .tomcat.web socket.WsFrameBase.processData (WsFrameBase.java:295) bei org.apache.tomcat.websocket.WsFrameBase.processInputBuffer (WsFrameBase.java:131) bei org.apache.tomcat.websocket.WsFrameClient.processSocketRead (WsFrameClient.java: 73) bei org.apache.tomcat.websocket.WsFrameClient.access $ 300 (WsFrameClient.java:31) bei org.apache.tomcat.websocket.WsFrameClient $ WsFrameClientCompletionHandler.completed (WsFrameClient.java:131) bei org.apache .tomcat.websocket.WsFrameClient $ WsFrameClientCompletionHandler.completed (WsFrameClient.java:114) bei sun.nio.ch.Invoker.invokeUnchecked (Invoker.java:126) bei sun.nio.ch.Invoker $ 2.run (Invoker. java: 218) bei sun.nio.ch.AsynchronousChannelGroupImpl $ 1.run (AsynchronousChannelGroupImpl.java:112) bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) bei java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java: 617) bei java.lang.Thread.run (Thread. java: 745)
Ich benutze sessionsubscribe ("/ user/queue/position-updates", ...) und sessionsubscribe ("/ queue/position-updates", ...) beide können nicht funktionieren –
Es ist die Ausnahme: –
Offenbar haben Sie in der Web-Socket-Konfiguration keinen org.springframework.messaging.converter.MessageConverter konfiguriert. – Reva