WebSockets:让javascript等到服务器响应

时间:2015-06-02 13:21:17

标签: javascript websocket wait

我的Web应用程序使用javascript通过HTTP请求与服务器通信。但是,服务器软件已更改,因此它不使用HTTP请求,而是使用WebSocket通信。

重写整个Web应用程序以完全使用开放式通信(即WebSockets)而不是请求 - 响应机制将是一项令人难以置信的繁琐工作,而且我在使用WebSockets进行Web时无法获得任何好处。应用

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

所以我想它归结为:如何让javascript等到服务器发送WebSocket消息?

干杯

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

1 个答案:

答案 0 :(得分:1)

如果我从评论中正确理解你,你实际上并不希望“暂停”你的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将是“您加入”+房间名称

你可能会做类似的事情:

客户代码:

socket.emit('getSomeResource', options, function(res){
    // do something with response in res variable.
});

服务器代码:

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