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

后端 未结 1 727
悲&欢浪女
悲&欢浪女 2020-12-18 05:24

I\'m new to node.js, so forgive the ignorance if this is simple.

What I want to do is setup a simple node.js http server to which a web-client connects. I also want

相关标签:
1条回答
  • 2020-12-18 06:18

    I made a running example for you to get going with: http://runnable.com/UXsar5hEezgaAACJ

    For now it's just a loopback client -> socket.io -> udp client -> udp server -> socket.io - > client.

    here's the core of it:

    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();
    
    0 讨论(0)
提交回复
热议问题