Прочитать файл с S3 и передать его через сокет io

Если у меня два сервера, «Клиентский сервер» и «Сервер 2». Задача «Клиент-сервер» - прочитать файл с S3 (AWS) и передать его на «Server2» с помощью socket.io. «Сервер2» должен хранить данные на своем диске.

Клиент-сервер

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.info("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», но это только частичные данные, поскольку я могу проверить это, проверив размер файла. Например, я отправляю текстовый файл размером более 100 МБ, я могу видеть только 14 МБ на «Server2».

Я следовал документации socket.io-stream по отправке данных / записи данных, но я не уверен, почему я получаю только частичные данные файла.

Относится к вопросу, который вы разместили вчера: stackoverflow.com/questions/49223987/….

jfriend00 13.03.2018 02:51

@ jfriend00 да, похожий код, пытался решить другую проблему

RRP 13.03.2018 02:53

Вы пытались дождаться подключения dataNodeSocket, прежде чем пытаться передавать на него потоковую передачу?

jfriend00 13.03.2018 02:53

Итак, когда я выполняю dataNodeSocket.on ('connect', function () {}) и вызываю emit и piping в этом обратном вызове. Кажется, у меня появляется ошибка Ошибка: поток уже отправлен.

RRP 13.03.2018 03:03

Тогда вы, вероятно, делаете это неправильно. Я не могу помочь вам отладить его, не увидев фактический код, который вы пробовали.

jfriend00 13.03.2018 03:06

Это что-то вроде этого .. dataNodeSocket.on ('connect', function () {ss (dataNodeSocket) .emit ('sendData', stream, fileData); s3.getObject (paramsWithRange) .createReadStream (). Pipe (stream‌) ;});

RRP 13.03.2018 03:08

Хммм, похоже, что событие connect может срабатывать более одного раза. Он сработает, если ваше соединение socket.io будет прервано и вам потребуется переподключение. Интересно, происходит ли это с тобой? Вы можете console.info() увидеть это с помощью blockName в сообщении консоли. В диагностических целях вы также можете прослушать сообщение reconnect.

jfriend00 13.03.2018 03:14

Извините, я не подписался, поэтому, если мне нужно это проверить, мне нужно console.info () на стороне server2?

RRP 13.03.2018 03:19

Вам нужно увидеть, не является ли причиной вашей проблемы событие connect, срабатывающее более одного раза для данного сокета (из-за разорванного соединения, которое было повторно подключено).

jfriend00 13.03.2018 03:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
325
0

Другие вопросы по теме