WebSockets:让javascript等待,直到服务器响应



我的web应用程序使用javascript通过HTTP请求与服务器通信。然而,服务器软件改变了,不再使用HTTP请求,而是使用WebSocket通信。

重写整个web应用程序以使用开放通信(即WebSockets)而不是完全使用请求-响应机制将是一项令人难以置信的乏味的工作,并且我真的没有在web应用程序中使用WebSockets获得任何好处。

我想要能够实现的是添加一个javascript模块,通过WebSockets进行通信,但仍然以请求-响应的方式。我想这意味着我必须"暂停"javascript,直到服务器响应我的WebSocket消息?因为对于HTTP请求,我的web应用程序一直等到请求得到响应。

所以我猜它归结为:我怎么能让javascript等待,直到服务器发送WebSocket消息?

欢呼

编辑:为了指定,我的Javascript代码通过一个名为"get(URL)"的函数在整个源代码中使用HTTP请求。我想修改这个函数,以便它发送WebSocket消息,等待响应并返回响应。什么好主意吗?

如果我从注释中正确理解您的话,您实际上并不想"暂停"您的Javascript,而只是想用websocket通信代替异步ajax调用。

您将向服务器发送一条消息,并在服务器中使用预定义的密钥。然后,如果您愿意,可以在消息中包含某种有效负载,然后使用接收到的数据使用回调函数。下面是一个示例,我为我创建的一个简单的聊天应用程序做了类似的事情。

客户端代码:

socket.emit('join', options, function(res){
    _printToChat(res);
});
服务器代码:

socket.on('join', function(roomname, fn){
    socket.join(roomname);
    fn('You joined ' + roomname);
});

这将发送一个带有键"join"的消息,并使用服务器的响应调用回调。在这种情况下,客户端的res将是"You joined " + roomname

你可能会这样做:

客户机代码:

socket.emit('getSomeResource', options, function(res){
    // do something with response in res variable.
});
服务器代码:

socket.on('getSomeResource', function(yourOptions, fn){
    fn(resourceToReturn);
});

最新更新