我有以下代码(来自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);
});
我的问题是 - 如何"长"如果客户等待订阅电话,直到他可以开始呼叫发送名称?我的意思是,我可以在这里看到的潜在问题如下:
i)客户端首先订阅队列,
ii)客户端调用sendName
iii)服务器在收到订阅呼叫之前收到第二个电话。
iv)客户端不会收到服务器的响应。
我的问题:
1)那种情况真的是一个问题吗?
2)我怎能避免它?
3)iv在某处读取,因为websocket与tcp一起工作,消息的顺序是保持的,所以我的最后一个问题是 - 对于没有websocket支持的客户端,stompJS的回退功能怎么样?订单也会得到维护吗?
答案 0 :(得分:0)
由于您在连接阶段订阅了队列,因此您只需等待连接建立,然后再向服务器发送请求。
答案 1 :(得分:0)
我认为你解决了你的问题,现在知道什么是承诺,回调和异步的javascript。
订阅时:
stompClient.subscribe('/user/queue/greeting', function(greeting) {
displayQueueMessage(greeting);
});
您将回调函数作为第二个参数传递,当且仅当订阅发生时(成功请求),您将执行回调。
如果你在回调中调用sendName()
,或者使用任何其他方法同步这两点,你可以避免它。