2

さまざまなデバイスからの遅延 (2 秒) のメッセージを含む単純な UDP ブロードキャスト結果をリダイレクトし、その結果を http 応答としてレンダリングしようとしています。次のコードは正常に機能しており、収集されたブロードキャスト メッセージを console.log で確認できますが、Web 応答はすべて空です。これを正しく実装するには?

var dgram = require("dgram");   
var http = require('http');

function broadcast(callback) {

    var data = '';

    var server = dgram.createSocket("udp4");

    server.on("message", function (message, rinfo) {
        data += message;    
    })

    server.bind(11000);

    var socket = dgram.createSocket("udp4");

    socket.bind();
    socket.setBroadcast(true);

    socket.send(Buffer([3]), 0, 1, 11001, '255.255.255.255', function(err, bytes) {     
        socket.close();
    });

    // dealy to collect all messages in 2 sec
    setTimeout(function () {
        callback(data);
    }, 2000);       
}

http.createServer(function (req, res) {

    res.writeHead(200, {'Content-Type': 'text/plain'});

    broadcast(function(data) {          
        res.write(data);
        console.log(data);          
    });

    res.end();

}).listen(6969, "0.0.0.0");

console.log('HTTP server running at http://0.0.0.0:6969/')
4

1 に答える 1

2

データを送信する前に電話をかけres.end()ています。コールバックに移動res.end()します。

http.createServer(function (req, res) {

    res.writeHead(200, {'Content-Type': 'text/plain'});

    broadcast(function(data) {          
        res.write(data);
        console.log(data);          
        res.end();
    });

}).listen(6969, "0.0.0.0");
于 2012-05-09T19:36:03.000 に答える