从S3读取文件并使用socket io进行流式传输

时间:2018-03-13 00:55:40

标签: node.js amazon-s3 socket.io

如果我有两台服务器,“客户端服务器”和“服务器2”。 “客户端服务器”的工作是从S3(AWS)读取文件,并使用socket.io将其传输到“Server2”。 “Server2”应该将数据存储在其磁盘上。

客户端服务器

var paramsWithRange = {
    Bucket: bucketParams.Bucket,
    Key: bucketParams.Key,
    //Range: "bytes=" + byteStart.toString() + "-" + byteStop.toString()
};

router.get('/writeData', function(req, res) {
    var ss = require("socket.io-stream");
    var io = req.app.get('socketio');
    ........
    ............
  function readFromS3(){
        var ss = require("socket.io-stream");
        var dataNodeSocket = io.connect('http://' + IP + ":5000");
        var stream = ss.createStream();

        var getFileName = nameNodeData['blockToDataNodes'][i]['key'].split('/');
        var fileData = {
            'mainFile': paramsWithRange['Key'].split('/')[1],
            'blockName': getFileName[1]
        };

        ss(dataNodeSocket).emit('sendData', stream, fileData);
        s3.getObject(paramsWithRange).createReadStream().pipe(stream);
  }

}

服务器2

var dataNodeIO = require('socket.io')(server);
var ss = require("socket.io-stream");
dataNodeIO.on('connection', function(socket) {
    console.log("Succesfully connected!");
    ss(socket).on('sendData', function(stream, data) {
        var IP = data['ipValue'];
        var blockName = data['blockName'];
        var mainFile = data['mainFile'];
        dataNode.makeDir(mainFile);
        dataNode.addToReport(mainFile, blockName);
        stream.pipe(fs.createWriteStream(mainFile + '/' + blockName));
    });

});

目前,我能够看到数据存储在“Server2”中,但是它只有部分数据,因为我可以通过检查文件大小来验证这一点。例如,我发送了一个100MB的文本文件,我只能在“Server2”上看到14MB。

我遵循发送数据/写入数据的socket.io-stream文档,但我不确定为什么我只获取部分文件数据。

0 个答案:

没有答案