То, что я пытался достичь с помощью node.js/io.js, - это отправить файл с одного сервера на другой через прокси. Чтобы избежать буферизации памяти, я хочу использовать потоки.Отправить файл через сокет tcp через прокси с потоками
Прокси-сервер должен иметь возможность динамически подключаться к нескольким объектам. Информация о целевом соединении для прокси должна быть отправлена до filedata.
С обычной связью сокетов и буферизацией это не проблема. Но как или вообще это можно сделать с потоками?
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
Спасибо за ответ. До сих пор управлял потоками. Проблема связана с обработкой соединений, например, ограждением их друг от друга на прокси. Обычно я бы делал это с отдельными потоками, где каждый протектор представляет собой цепочку между исходным -> прокси -> цель и обратно. Но в узле это кажется невозможным. – tmoe