01/10/2018, 12:11

Host UDP nodejs server

Mình đang dựng 1 cái server udp bằng node, mình đưa server lên heroku để chạy online và dùng client ở dưới máy mình gởi dữ liệu lên nhưng không chạy được. Mọi người có biết cách xử lý chỗ này giúp mình không?
Đây là code server của mình:

var debug = require('debug')('gatewaylong:server');
var http = require('http');
var dgram = require('dgram');
var request = require('request');

var host = 'localhost';
var port = normalizePort(process.env.PORT || '30000');

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

server.on('error', onError);
server.on('listening', onListening);
server.on('message', function (message, remote) {
    console.log(remote.address + ':' + remote.port +' - ' + message);
    onMessage(message);
});

server.bind(port);

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    return val;
  }

  if (port >= 0) {
    return port;
  }

  return false;
}

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
  console.log('UDP Server listening on ' + addr.address + ':' + addr.port);
}

function onMessage(message){
  var jsonObj = {"message": message};
  request({
      url: "https://gatewaylong.herokuapp.com:3000",
      method: "GET",
      json: true,   // <--Very important!!!
      body: jsonObj
  }, function (error, response, body){
      console.log(body + ' ahihi ' + message);
      //console.log(jsonObj + ');
  });
}

Còn đây là code client gởi data lên:

var PORT = 30000;
var HOST = 'http://gatewayudpserver.herokuapp.com';

var dgram = require('dgram');
var message = new Buffer('My KungFu is Good!');

var client = dgram.createSocket('udp4');
client.send(message, 0, message.length, PORT, HOST, function(err, bytes) {
    if (err) throw err;
    console.log('UDP message sent to ' + HOST +':'+ PORT);
    client.close();
});

Mình cám ơn nhiều!!

Dark.Hades viết 14:17 ngày 01/10/2018

var PORT = 30000;

Theo mình biết thì bạn không thể tự động set port này đâu, port này bạn phải lấy log từ server xem heroku expose ra là gì, sau đó dưới client mới thực hiện gửi lên port đó

var port = normalizePort(process.env.PORT || ‘30000’);

Cụ thể là tại đây, bạn console.log cái port này ra.
// Mỗi lần khởi động app nó sẽ mang 1 port khác nhau

Bài liên quan
0