当前位置: 首页 > 知识库问答 >
问题:

带Sockjs&Spring4但不带Stomp的WebSocket

祝高超
2023-03-14

根据Spring网站上的这个教程,我知道了如何使用Stomp和Spring4建立一个基于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);
            });
        });

在服务器端,控制器中有以下内容:

@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/greatures”@sendto(“/topic/greatures”)将消息发送回stompclient

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

那么,有什么方法可以用Spring4、SockJS和没有跺脚的情况下做到这一点呢?还是Spring4WebSocket只支持stomp?

共有1个答案

徐俊楚
2023-03-14

Spring支持stompWebSocket的支持,但是不强制使用子协议,您可以处理原始WebSocket。当使用原始websocket时,发送的消息缺乏使Spring将其路由到特定消息处理程序方法的信息(我们没有任何消息传递协议),因此您必须实现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);
}
 类似资料:
  • 问题内容: 有没有一种方法可以将WebSocket与SockJS客户端和Spring 4服务器一起使用,而不能与STOMP一起使用? 基于Spring网站上的本教程,我知道如何使用Stomp和Spring 4设置基于WebSocket的应用程序。在客户端,我们有: 在服务器端,控制器中包含以下内容: 现在,我了解可以确保如果将消息发送到目的地,则将调用该方法。并且由于已订阅,因此会将邮件发送回。

  • 我们正在将SpringWebSockets集成到我们的应用程序中,我运行了HelloWorld示例,令人惊讶的是,spring为我们连接了一切,以便将服务器端通知推送到客户端。 不过,我有一些简单的问题 1) 队列是如何创建的?我使用的是ActiveMQ,队列名称与我在目的地中指定的不同(例如,像greetings-user3n9\u jn3i)。 2)目标名称是否不同于队列? 3) 我正在使用A

  • 我有一个带sokjs套接字的节点应用程序。 一些HTML/JS客户端使用stomp over sock JS,但我不明白订阅是如何工作的: 客户端已连接,事件已记录,但范围为$scope。从不打电话通知。如何配置主题订阅? 编辑: 请注意,我一定清楚。 我使用sockjs模块作为websocket服务器。 没有太多的配置:

  • 我正在将Spring网络套接字集成到一个网络应用程序中。我想将其用于在 ajax 中花费很长时间的两个调用。根据我的理解,我看到关于我如何处理有不同的设计选择。我正在考虑以下内容,您能否让我知道什么是最佳选择,如果是,为什么 1)一旦用户通过SockJS登录到应用程序,就打开一个套接字连接,并使用该连接来发送消息和订阅我想要拨打的两个电话。我对这个设计的一个疑问是,如果用户关闭浏览器,套接字连接会

  • 问题内容: 背景 我正在使用Spring Boot(1.3.0.BUILD-SNAPSHOT)设置一个RESTful Web应用程序,该应用程序包括一个STOMP / SockJS WebSocket,我打算从iOS应用程序和Web浏览器中使用它。我想使用JSON Web令牌(JWT)来保护REST请求和WebSocket接口,但后者遇到了困难。 该应用程序受Spring Security保护:

  • 我有一个问题——我有一个带有websocket的java spring web应用程序,在本教程之后是sockjs实现https://spring.io/guides/gs/messaging-stomp-websocket/我需要用NodeJS连接到这个服务器应用程序。服务器应用程序是正常的,因为我设法通过web应用程序连接,它正在工作,但问题来了,当我试图实现它的nodejs。因此,要明确这一