gpt4 book ai didi

java - 带有 Sockjs 和 Spring 4 但没有 Stomp 的 WebSocket

转载 作者:IT老高 更新时间:2023-10-28 21:00:41 25 4
gpt4 key购买 nike

有没有办法将 WebSockets 与 SockJS 客户端和 Spring 4 服务器一起使用,但不使用 STOMP?

根据 Spring 网站上的本教程,我知道如何使用 Stomp 和 Spring 4 设置基于 WebSocket 的应用程序。在客户端,我们有:

     var socket = new SockJS('/hello');
stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
setConnected(true);
console.log('Connected: ' + frame);
stompClient.subscribe('/topic/greetings', function(greeting){
showGreeting(JSON.parse(greeting.body).content);
});
});

在服务器端,我们在 Controller 中有以下内容:

@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
Thread.sleep(3000); // simulated delay
return new Greeting("Hello, " + message.getName() + "!");
}

现在,我了解到 @MessageMapping("/hello") 确保如果将消息发送到目标 "/hello",则 将调用 greeting() 方法。由于 stompClient 订阅了 "/topic/greetings"@SendTo("/topic/greetings") 将发送消息回到stompClient

但是上面的问题是 stompClient 是一个 Stomp 对象。我想简单地使用 sock.send('test'); 并将其传送到我的服务器的目的地。而我想做@SendTo("myownclientdestinationmap"),我可以通过

接收
sock.onmessage = function(e) {
console.log('message', e.data);
};

那么,有什么方法可以使用 Spring 4、SockJS 而没有 Stomp?还是 Spring 4 WebSocket 只支持 Stomp?

最佳答案

Spring 支持 STOMP 而不是 WebSocket 但子协议(protocol)的使用不是强制性的,您可以处理原始 websocket。使用原始 websocket 时,发送的消息缺少信息,无法让 Spring 将其路由到特定的消息处理程序方法(我们没有任何消息传递协议(protocol)),因此您不必注释 Controller ,而是必须实现 WebSocketHandler:

public class GreetingHandler extends TextWebSocketHandler {

@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
Thread.sleep(3000); // simulated delay
TextMessage msg = new TextMessage("Hello, " + message.getPayload() + "!");
session.sendMessage(msg);
}
}

然后将您的处理程序添加到配置中的注册表(您可以添加多个处理程序并使用 SockJS 作为备用选项):

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(greetingHandler(), "/greeting").withSockJS();
}

@Bean
public WebSocketHandler greetingHandler() {
return new GreetingHandler();
}
}

客户端将是这样的:

var sock = new SockJS('http://localhost:8080/greeting');

sock.onmessage = function(e) {
console.log('message', e.data);
}

关于java - 带有 Sockjs 和 Spring 4 但没有 Stomp 的 WebSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27158106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com