javascript - 使用代理的 NodeJS 简单 UDP 客户端服务器应用程序

标签 javascript node.js sockets port broker

我正在使用 UDP 协议(protocol)编写一个简单的客户端服务器 NodeJS 应用程序。该应用程序的要点是它需要使用代理,在给定情况下,代理的功能是将发送者与接收者链接起来。需求告诉我,发送者不需要知道接收者的IP地址和端口号——它只需要知道经纪人相应的IP和端口。然后,代理将根据服务器的 IP 和 PORT 将客户端的消息发送到服务器。

为了澄清前面的(?令人困惑的)段落,您将在下面找到我迄今为止所做工作的说明:

发送者.js

var PORT1 = XXXXX;
var HOST = '127.0.0.1';
var fs = require('fs');
var dgram = require('dgram');
var client = dgram.createSocket('udp4');


fs.readFile('Path/to/the/file','utf8', function (err, data) {
  if (err) throw err;
  var message = new Buffer(data);

  client.send(data, 0, message.length, PORT1, HOST, function(err, bytes) {
    if (err) throw err;
    console.log('UDP message sent to ' + HOST +':'+ PORT1);
    client.close();
    });
});

上面的代码从文件中读取,将其内容存储在缓冲区中并将其发送到代理的端口(代理监听相同的端口)和主机(在我的例子中是本地主机)。

经纪人.js

var PORT1 = XXXXX;
var PORT2 = YYYYY;
var HOST = '127.0.0.1';
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
var client = dgram.createSocket('udp4');

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

server.on('message', function (message, remote) {
  client.send(message, 0, message.length, PORT2, HOST, function(err, bytes) {
    if (err) throw err;
    console.log('UDP message sent to ' + HOST +':'+ PORT2);
    client.close();
  });
    console.log(remote.address + ':' + remote.port +' - ' + message);
});

server.bind(PORT1, HOST);

这里,PORT1是代理监听的端口(等待来自发送者的传入消息),PORT2是将消息传输到接收者的端口(相应地,接收者监听此端口)。

接收者.js

var PORT2 = YYYYY;
var HOST = '127.0.0.1';
var fs = require('fs');
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
var parser = require('xml2json');

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

server.on('message', function (message, remote) {
    console.log(remote.address + ':' + remote.port +' - ' + message);
  var contents = fs.writeFile("/Path/To/Written/File", parser.toJson(message),
  function(error){
      if (error) {
        console.log("error writing");
       }
  console.log("File was saved");
    });
});

server.bind(PORT2, HOST);

接收方从代理获取消息并将其写入 JSON 格式的文件。

结果如下:

发件人

UserName's-MacBook-Pro:UDP server UserName$ node sender.js 
UDP message sent to 127.0.0.1:XXXXX

经纪人

UserName's-MacBook-Pro:UDP server UserName$ node broker.js 
UDP broker listening on 127.0.0.1:XXXXX
127.0.0.1:60009 - <?xml version="1.0"?>
<Some XML content here>
</XML content ends here>
UDP message sent to 127.0.0.1:YYYYY

接收者

UserName's-MacBook-Pro:UDP server UserName$ node receiver.js 
UDP receiver listening on 127.0.0.1:YYYYY
127.0.0.1:63407 - <?xml version="1.0"?>
<XML contents here>
</XML content ends here>
File was saved

对于这么长的帖子,我深表歉意,但我想详细说明所有细节,以消除(希望)任何歧义。现在来说说这个问题,

这是我的问题

为了解决以下问题,我应该对经纪商进行哪些更改:

如果有多个发送方和接收方,代理应管理端口以将发送方链接到接收方(具有任何指定的条件)。

提前谢谢您!

最佳答案

看看这本书“Node.js 设计模式,出版商:Packt Publishing,作者:Mario Casciaro ISBN:978-1-78328-731-4,年份:2014”,第 361 页。其中有您想要做的事情,并且有非常好的解释。 希望它会有所帮助!

关于javascript - 使用代理的 NodeJS 简单 UDP 客户端服务器应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33019625/

相关文章:

c - 如何接收具有不同于监听接口(interface)的已知目标 MAC 的数据包 UDP

java - 如何从绑定(bind)到 Android 父 Activity 的 fragment 访问服务功能?

javascript - "Hard"d3,js力向图中的节点过滤

javascript - css 与返回 false 值的函数绑定(bind)

javascript - 无法将 jquery 元素附加到新包装的元素

javascript - 如何在 Gatsby 中将环境变量传递给 Sass 插件?

c++ - 选择功能不断返回-1

javascript - 如何使用 JS/onclick 过滤 Wordpress 中的元素?

javascript - Gulp 任务中 `return` 语句和 `callback` 引用的用途

javascript - 确定两个坐标是否在所需半径内