0

我正在开发一个 node.js 应用程序,该应用程序试图从 socket.io 客户端获取数据以填充对来自另一个客户端的 POST 请求的响应。就像是...

  1. 来自客户端 A 的 POST http 请求
  2. 服务器通过 socket.io 从客户端 B 请求数据
  3. 客户端 B 通过套接字向服务器返回数据
  4. 服务器响应客户端 A

发出初始 POST 请求的客户端 A 是一个 Web 服务(Plivo/plivo-node),因此我无法更改它访问服务器的方式。

在 POST 请求上调用的节点代码如下所示...

app.handlePlivoRequest = function (req, res) {

    // create Plivo response object
    var r = plivo.Response();

    // set listener for client response
    client.socket.on('callResponse', function(msg){

        // add msg data from client to the Plivo response
        r.addSpeak(msg);
    });

    // forward request to socket client
    client.socket.emit('call', req.body );

    // render response as XML for Plivo
    return r.toXML();

}

我遇到的问题是handlePlivoRequest 无需等待客户端的响应即可返回。

谁能帮助我如何重新考虑这个以等待套接字响应?

谢谢!

4

1 回答 1

0

您需要在套接字响应回调中结束 http 请求:

app.handlePlivoRequest = function (req, res) {

// create Plivo response object
var r = plivo.Response();

// set listener for client response
client.socket.on('callResponse', function(msg){

    // add msg data from client to the Plivo response
    r.addSpeak(msg);

    // render response as XML for Plivo
    res.set({ 'Content-Type' : 'text/xml'});
    res.end(r.toXML());
});

// forward request to socket client and wait for a response..
client.socket.emit('call', req.body );

}

于 2014-08-03T21:48:47.333 回答