【发布时间】:2015-07-14 23:43:03
【问题描述】:
我尝试使用 node.js/io.js 实现的目的是通过代理将文件从一台服务器发送到另一台服务器。为了避免内存缓冲,我想使用流。
代理应该能够动态连接到多个目标。代理的目标连接信息应该在文件数据之前发送。
通过正常的套接字通信和缓冲,这不是问题。但是如何或一般情况下可以使用流来完成?
var net = require('net');
var fs = require('fs');
//create readstream from file
var myFile = fs.createReadStream('E:/sample.tar.gz');
// Proxy server
//####################################################################################################
var proxy = net.createServer(function (socket) {
// Create a new connection to the TCP server
var client = net.connect('9010');
// 2-way pipe between client and TCP server
socket.pipe(client).pipe(socket);
}).listen(9000);
// Targetserver
//####################################################################################################
var server = net.createServer(function (socket) {
// create filestream to write data into file
var destfile = fs.createWriteStream('E:/sample_copy.tar.gz')
socket.on('data', function (buffer) {
console.log('Get data on targetserver...');
// write buffer to file
destfile.write(buffer);
});
socket.on('end', function () {
// release file from writestream
destfile.end();
});
}).listen(9010);
// Client
//####################################################################################################
// Send file to proxy
var client = new net.Socket();
// connect to proxy
client.connect('9000', '127.0.0.1', function () {
console.log('Connection to proxy opened');
});
// send data to proxy
myFile.pipe(client);
// read response from taget
client.on('data', function(data) {
console.log('Response: ' + data);
// close the client socket completely
client.destroy();
});
// Add a 'close' event handler for the client socket
client.on('close', function() {
console.log('Connection to proxy closed');
});
也欢迎任何关于好的教程的提示。
TMOE
【问题讨论】:
标签: node.js sockets proxy stream io.js