Spring websocket 和 Stomp.js - 我应该在订阅和发送之间等待多长时间?

Urb*_*leg 5 javascript java spring websocket spring-websocket

我有以下代码(来自 spring websocket 演示应用程序):

    stompClient.connect({}, function(frame) {
        setConnected(true);
        console.log('Connected: ' + frame);
        stompClient.subscribe('/user/queue/greeting', function(greeting) {          
            displayQueueMessage(greeting);
        });

    function sendName() {
      var name = document.getElementById('name').value;
      stompClient.send("/app/wsdemo", {}, JSON.stringify({
        'name' : name
       }));
    }
Run Code Online (Sandbox Code Playgroud)

这是对服务器上队列的简单订阅调用,以及另一种发送调用服务器的方法“sendName()”。

在调用 sendName 之后,服务器响应 connect 方法提供的回调函数:

function(greeting) {            
    displayQueueMessage(greeting);
});
Run Code Online (Sandbox Code Playgroud)

我的问题是 - 客户应该从subscribe调用等待多久,直到他可以开始调用sendName?我的意思是,我在这里可以看到的潜在问题如下:

i) 客户端首先订阅队列,

ii) 客户端调用 sendName

iii) 服务器在收到订阅调用之前收到第二个调用。

iv) 客户端不会收到来自服务器的响应。

我的问题:

1)那个场景真的是一个问题吗?

2)我怎样才能避免它?

3)我在某处读到过,因为 websocket 与 tcp 一起工作,所以消息的顺序是保持的,所以我的最后一个问题是 - 对于没有 websocket 支持的客户端,stompJS 的回退功能怎么样?订单也会维持吗?

Ale*_*ini 0

由于您在连接阶段订阅队列,因此您只需等待连接建立即可向服务器发送请求。