我想把整个Spring WebSocket的事情都包住头,有很多例子,包括Baeldung上的示例应用程序。问题是,许多人无法立即使用,并且几乎总是遗漏重要的部分。还有在线WebSocket“ echo”端点,应该如何使用它们对我来说还是个谜。
无论如何,我可以使用here中的代码通过提供的JS示例在UI上启动并运行所有消息。但是我不想在UI上接收消息,我希望我的Java代码接收消息,并且无法弄清楚如何将WebSocket / STOMP客户端与处理程序类结合使用,也无法确定哪个组件在做什么。我已经尝试过将其作为“普通” WS和STOMP。
从多个教程中找出我编写的这段代码:
@Component
public class SimpleStompSessionHandler extends StompSessionHandlerAdapter {
@Override
public void afterConnected(StompSession session, StompHeaders connectedHeaders) {
session.subscribe("/topic/greetings", this);
}
@Override
public void handleFrame(StompHeaders headers, Object payload) {
HelloMessage msg = (HelloMessage) payload;
System.out.println("Received : " + msg.getName());
}
}
如果handleFrame()
在收到消息后被呼叫,那么我需要客户端做什么?还是应该在handleFrame
内调用客户端方法?但是,我应该在哪里进行初始握手或调用connect方法呢?所以无论如何都行不通...
这是一个客户示例:
@Component
public class SimpleWebSocketClient {
@Autowired
private SimpleStompSessionHandler simpleStompSessionHandler;
public void getHelloMessage() {
StandardWebSocketClient client = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(client);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
stompClient.connect("/topic/greetings", simpleStompSessionHandler);
new Scanner(System.in).nextLine(); // Don't close immediately.
}
}
好事是,有一种方法可以进行初始连接,并且可以插入处理程序,但是我如何对传入的消息做出反应?这有点模糊。我找不到任何全面有效的纯Jave代码示例来说明如何做到这一点,几乎所有示例都使用JS客户端。
有人有一个有效的客户端示例来说明如何配置和设置客户端以接收消息吗?