nodejs + express:make http request等待udp响应

时间:2016-11-25 17:27:39

标签: node.js express udp

我是 nodejs网络(快速)应用,当某人(UI)向我发送获取请求时,我发送udp请求对另一个人,并期待他的回复,当udp服务器(我的一部分)收到他的回复时,我把它作为httpresponse发送回给我发送http请求的人。

  1. 如何让httprequest等到收到udp回复?
  2. 如何设置udp服务器和我的控制器/操作方法之间的通信,该方法有一个httpget请求。
  3. 我尝试了'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);
    }
    

    感谢。

1 个答案:

答案 0 :(得分:1)

您可以将代码更改为

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);
}