簡體   English   中英

node.js偵聽UDP並轉發到連接的http Web客戶端

[英]node.js listen for UDP and forward to connected http web clients

我是node.js的新手,如果這很簡單,請原諒無知。

我想要做的是設置一個簡單的node.js http服務器,web客戶端連接到該服務器。 我還希望node.js服務器在單獨的端口上充當UDP偵聽器,在該端口上它將從其他應用程序接收JSON有效負載。 我希望node.js服務器立即將這些JSON有效負載轉發到一個或多個連接的Web客戶端。

我從一些最初的谷歌搜索到這里遠:

  1. 創建一個簡單的node.js http服務器,該服務器使用靜態html頁面進行響應:

     //Initialize the HTTP server on port 8080, serve the index.html page var server = http.createServer(function(req, res) { res.writeHead(200, { 'Content-type': 'text/html'}); res.end(fs.readFileSync(__dirname + '/index.html')); }).listen(8080, function() { console.log('Listening at: 127.0.0.1 8080'); } ); 
  2. 在單獨的端口上初始化UDP服務器:

     //Initialize a UDP server to listen for json payloads on port 3333 var srv = dgram.createSocket("udp4"); srv.on("message", function (msg, rinfo) { console.log("server got: " + msg + " from " + rinfo.address + ":" + rinfo.port); io.sockets.broadcast.emit('message', 'test'); //stream.write(msg); //socket.broadcast.emit('message',msg); }); srv.on("listening", function () { var address = srv.address(); console.log("server listening " + address.address + ":" + address.port); }); srv.bind(5555); 
  3. 使用socket.io在Web客戶端和服務器之間建立實時連接:

     //this listens for socket messages from the client and broadcasts to all other clients var io = require('socket.io').listen(server); io.sockets.on('connection', function (socket) { socket.on('message', function (msg) { console.log('Message Received: ', msg.data.skeletons[0] ? msg.data.skeletons[0].skeleton_id : ''); socket.broadcast.emit('message', msg); } ); }); 

我想我的問題是我不知道如何橋接2和3,以便將收到的UDP數據包廣播到連接的socket.io客戶端。 或者也許有一種更簡單,更優雅的方式呢? 我發現socket.io的文檔缺乏...

編輯:感謝修復代碼格式的人

我為你做了一個運行的例子: http//runnable.com/UXsar5hEezgaAACJ

現在它只是一個環回客戶端 - > socket.io - > udp客戶端 - > udp服務器 - > socket.io - >客戶端。

這是它的核心:

var http = require('http');
var fs = require('fs');
var html = fs.readFileSync(__dirname + '/index.html');

//Initialize the HTTP server on port 8080, serve the index.html page
var server = http.createServer(function(req, res) {
  res.writeHead(200, { 
    'Content-type': 'text/html'
  });
  res.end(html);
}).listen( process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP, function() {
  console.log('Listening');
});

var io = require('socket.io').listen(server);

io.set('log level', 0);

io.sockets.on('connection', function (socket) {
  socket.emit('message', 'connected');
  socket.on('message', function (data) {
    console.log(data);
    var address = srv.address();
    var client = dgram.createSocket("udp4");
    var message = new Buffer(data);
    client.send(message, 0, message.length, address.port, address.address, function(err, bytes) {
      client.close();
    });
  });
});

var dgram = require('dgram');

//Initialize a UDP server to listen for json payloads on port 3333
var srv = dgram.createSocket("udp4");
srv.on("message", function (msg, rinfo) {
  console.log("server got: " + msg + " from " + rinfo.address + ":" + rinfo.port);
  io.sockets.emit('message', 'udp');
});

srv.on("listening", function () {
  var address = srv.address();
  console.log("server listening " + address.address + ":" + address.port);
});

srv.on('error', function (err) {
  console.error(err);
  process.exit(0);
});

srv.bind();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM