gpt4 book ai didi

node.js - 通过带有流的代理通过 tcp 套接字发送文件

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:35 26 4
gpt4 key购买 nike

我尝试使用 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

最佳答案

socket.write() 已经在底层使用了流,因此您不需要执行任何特殊操作。只需向其发送通常的 Buffer 对象或字符串,它就会使用流。

从 io.js 的当前源代码来看,使用 socket.write() 时会发生以下情况:

Socket.prototype.write = function(chunk, encoding, cb) {
if (typeof chunk !== 'string' && !(chunk instanceof Buffer))
throw new TypeError('invalid data');
return stream.Duplex.prototype.write.apply(this, arguments);
};

流的声明如下:

const stream = require('stream');

如果我误解了您的问题/要求,请道歉!无论如何,请澄清我是否误解了您,我会再试一次(或删除此答案,以免分散您的注意力)。

关于node.js - 通过带有流的代理通过 tcp 套接字发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com