私は春にWebソケットサーバーとクライアントを作成しました。コードは以下のとおりです。サーバーにメッセージを送信するコードが動作しますが、sesssion.subscribeメソッドはサーバーからメッセージを受信できません。私は多くの文書を検索し、自分のコードをチェックします。私はなぜそれがうまくいかないのではない。ここでMessageConversion(Spring websocket client)の使い方とカスタマイズ方法
は私のクライアントのコードです:ここで
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);
}
}
は私のサーバーのコードです:
@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");
}
}
それは例外である:
org.springframework.messaging.converter.MessageConversionException:いいえ、適切なコンバーター、payloadType =クラスjava.lang.String、handlerType =クラスcom.example.hello.MyStompSessionHandler at org.springframework.messaging.simp.stomp.D org.springframework.web.socket.messaging.WebSocketStompClient $ WebSocketTcpConnectionHandlerAdapter.handleMessageでorg.springframework.messaging.simp.stomp.DefaultStompSession.handleMessage(DefaultStompSession.java:373) でefaultStompSession.invokeHandler(DefaultStompSession.java:419) ( WebSocketStompClient.java:342)org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.handleFrameでorg.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.handleMessageFrame(AbstractClientSockJsSession.java:267) で (AbstractClientSockJsSession。 (WebSocketTransport.java:162) at org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage(A bstractWebSocketHandler.java:43)org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.access $ 000(StandardWebSocketHandlerAdapterでorg.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage(StandardWebSocketHandlerAdapter.java:110) で に.java:42) at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter $ 3.onMessage(StandardWebSocketHandlerAdapter.java:81) at org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter $ 3.onMessage(StandardWebSocketHandlerAdapter .java:78) at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:399) at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:500) at org.apache .tomcat.web (WsFrameBase.java:131) (org.apache.tomcat.websocket.WsFrameClient.processSocketRead(WsFrameBase.java:131) 73) at org.apache.tomcat.websocket.WsFrameClient.access $ 300(WsFrameClient.java:31) at org.apache.tomcat.websocket.WsFrameClient $ WsFrameClientCompletionHandler.completed(WsFrameClient.java:131) at org.apache .tomcat.websocket.WsFrameClient $ WsFrameClientCompletionHandler.completed(WsFrameClient.java:114) at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126) at sun.nio.ch.Invoker $ 2.run(Invoker。 java:218) at sun.nio.ch.AsynchronousChannelGroupImpl $ 1.run(AsynchronousChannelGroupImpl.java:112) のjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) のjava.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) のjava.lang.Thread.run(スレッド。 java:745)
私はsession.subscribe( "/ user/queue/position-updates"、...)とsession.subscribe( "/ queue/position-updates"、...)を使用していますが、両方とも動作しません。 –
例外: –
Webソケット設定でorg.springframework.messaging.converter.MessageConverterを設定していないようです。 – Reva