繁体   English   中英

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

[英]Spring websocket and Stomp.js - how long should i wait between subscribe and send?

我有以下代码(来自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
       }));
    }

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

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

function(greeting) {            
    displayQueueMessage(greeting);
});

我的问题是 - 客户端如何从订阅呼叫中等待“长”,直到他可以开始调用sendName 我的意思是,我在这里可以看到的潜在问题如下:

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

ii)客户端调用sendName

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

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

我的问题:

1)那种情况真的是一个问题吗?

2)我怎么能避免它?

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

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

我认为你解决了你的问题,现在知道什么是承诺,回调和异步中的javascript。

订阅时:

  stompClient.subscribe('/user/queue/greeting', function(greeting) {          
        displayQueueMessage(greeting);
    });

您将回调函数作为第二个参数传递,当且仅当订阅发生时(成功请求),您将执行回调。

如果您将在回调中调用sendName() ,或使用任何其他方法来同步这两个点,则可以避免它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM