2016-11-25 55 views
1

我是一個的NodeJS網(快遞)申請,當有人(UI)發送訪問請求給我,我發送一個UDP請求到另一個男人並希望得到他的回覆,當udp服務器(我的一部分)收到他的回覆時,我將其作爲httpresponse發送給發送給我的httpget請求。的NodeJS +表達:讓http請求等待UDP響應

  1. 如何使httprequest等到收到udp響應?
  2. 如何設置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); 
} 

謝謝。

+0

?你是如何進行udp通話的? –

+0

*新增代碼* – user1179299

回答

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

謝謝。但我想沒有解釋清楚。 我需要發送res.send()當我收到我發送udp消息的人的udp(響應)消息。 我正在通過udp詢問一些數據,當我收到它時,我需要將它發送到其他系統。 – user1179299

+0

@ user1179299對不起。我更新了代碼,看看你是否需要 –