2015-02-03 6 views
0

Я пишу очень простой пример клиента UDP. Вот код:Как подождать следующего события в Node.js?

var dgram = require('dgram'); 
var msg = new Buffer('hello'); 
var s = dgram.createSocket('udp4'); 
s.send(msg, 0, msg.length, 6000, '127.0.0.1', function(err, bytes) { 
    if (err) throw err; 
    console.log('UDP message sent'); 
}); 
s.on('message', function (message, remote) { 
    console.log(remote.address + ':' + remote.port +' - ' + message); 
}); 

Как мне сделать мою программу ждать следующего события, то есть ответ от сервера? Я попытался использовать setImmediate, но он получает мой процессор до 100%, поэтому кажется, что это оживленное ожидание. Вот код еще раз: message событие

function wait() { 
    setImmediate(wait); 
}  
wait(); 
+0

Узел является управляемой событиями системы. Вы слушаете события. Вы никогда не заставите свой код ждать. – jfriend00

+0

Это мой вопрос: как я могу прослушивать события без моего выполнения до конца моего кода и просто выйти? – ivarec

+0

Ох ... только заметил, что на самом деле он не выходит. Угадайте, что мне нужно больше узнать о Node.js internals :) – ivarec

ответ

0

Используйте dgram в. message имеет обратный вызов с параметрами msg и rinfo. msg содержит буфер фактического полученного пакета и rinfo содержит информацию об отправителе (например, IP-адрес и порт).

Пример:

var dgram = require('dgram'); 
var msg = new Buffer('hello'); 
var s = dgram.createSocket('udp4'); 
s.send(msg, 0, msg.length, 6000, '127.0.0.1', function(err, bytes) { 
    if (err) throw err; 
    console.log('UDP message sent'); 
}); 

s.on('message', function (msg, rinfo) { 
    console.log('Message from '+packetInfo.address+': '+msg.toString("utf8")); 
}); 
+0

Это была опечатка: мой обработчик должен был быть там в вопросе, но если я не сделаю остановку выполнения, моя программа просто выйдет. Это вопрос моего вопроса. Спасибо за помощь до сих пор :) – ivarec