我是一个nodejs web(express)应用程序,当某人(UI)向我发送get请求时,我向另一个人发送了udp请求并期望他的答复,而udp服务器(我的一部分)收到答复时从他那里,我将它作为httpresponse发送回给向我发送httpget请求的那个人。


如何使httprequest等待直到收到udp响应?
如何设置udp服务器与我的具有httpget请求的控制器/操作方法之间的通信。


我尝试了“ setTimeOut”功能,但请求不等待它。

我从我的控制器/动作中调用此sendMessage:

   module.exports.sendMessage = function (ip, port, message) {
        var msg = new Buffer(message);
        var dgram = require('dgram');
        var client = dgram.createSocket('udp4');

        client.send(msg, 0, msg.length, port, ip, function (err, bytes) {
            if (err)
                throw err;
            console.log('UDP message sent to ' + ip + ':' + port);
            client.close();
        });
    }


控制器/动作代码:

router.get('/getSomething', function (req, res) {
   //calls send message from here
}


udp服务器代码,从应用程序启动时开始一直运行:

server.on('message', function (message, remote) {
    console.log(remote.address + ':' + remote.port + ' - ' + message + message.length);
}


谢谢。

最佳答案

您可以将代码更改为

module.exports.sendMessage = function (ip, port, message, res) {
    var msg = new Buffer(message);
    var dgram = require('dgram');
    var client = dgram.createSocket('udp4');

    client.send(msg, 0, msg.length, port, ip, function (err, bytes) {
        if (err)
            throw err;
        console.log('UDP message sent to ' + ip + ':' + port);
    });

    client.on('message', function(msg, rinfo) {
      client.close();
      res.send(msg);
    });
}


你可以这样称呼它

router.get('/getSomething', function (req, res) {
  sendMessage('x', 'z', 'y', res);
}

09-17 16:15
查看更多