2015-10-08 73 views
1

我正在使用UDP協議編寫一個簡單的客戶端服務器NodeJS應用程序。這個應用程序的要點是它需要使用代理程序,在特定情況下,其功能是將發件人與接收程序鏈接起來。這些要求告訴我,發件人不需要知道收件人的IP地址和端口號 - 它只需要知道代理的相應IP和端口。之後,代理將根據服務器的IP和端口將客戶的消息發送到服務器。NodeJS使用代理的簡單UDP客戶端服務器應用程序

爲了澄清前款規定的,下面你會發現什麼,我到目前爲止已經做了說明(迷惑):

sender.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(); 
    }); 
}); 

上面的代碼從文件讀取,將其內容存儲在緩衝區中,並將其發送到代理的端口(代理偵聽同一端口)和主機(在我的情況下是本地主機)。

broker.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是發送消息到接收器的端口(和相應地,所述接收者聽這個端口)。

receiver.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 

對於這篇較長的文章,我很抱歉,但是我想指定所有的細節以消除(希望)任何含糊之處。現在,爲了此事,

這裏是我的問題

我應該爲了解決以下問題作出經紀人什麼變化:

在多個發送者和接收者的情況下,經紀人應管理端口以將發件人鏈接到收件人(使用任何指定的標準)。

預先感謝您!

回答

1

看一看這本書「Node.js設計模式,出版商:Packt出版社:Mario Casciaro ISBN:978-1-78328-731-4年份:2014」在361頁。想做很好的解釋。 希望它會有所幫助!

相關問題