перезапустить процесс загрузки узла на s3 без настройки - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть API GETendpoint, который загружает файл 1 ГБ (точно 1080000108B) в мое ведро s3, это код:

var express = require('express'),
    HttpStatus = require('http-status-codes'),
    morgan = require('morgan'),
    packageConfig = require('./package.json'),    
    fs = require('fs'),    
    AWS = require('aws-sdk')
    //zlib = require('zlib')

express()
    .use(morgan('combined'))
    .get('/api/v1', function (req, res) {

        var s3 = new AWS.S3({
            accessKeyId:'my access key id',
            secretAccessKey:'my secret key access'
        });

        var rs = fs.createReadStream('./big.file')//.pipe(zlib.createGzip());

        s3.upload({
            Body:rs,
            Key:Date.now().toString(),
            Bucket:'my bucket'
        },function(err,data){
            console.log(err,data)
            res.status(HttpStatus.OK).send(err + data)
        }).on('httpUploadProgress', function(evt) {
            console.log('Progress:', evt.loaded, '/', evt.total); 
          })
        }).listen(process.env.PORT || 5000, function () {
        var address = this.address();
        var service = packageConfig.name + ' version: ' + packageConfig.version + ' ';
        console.log('%s Listening on %d', service, address.port);
    });

Я открываю первый терминал A и запускаю этот сервер

node myserver.js

Затем я открываю второй терминал B и вызываю конечную точку с помощью следующей команды:

curl localhost:5000/api/v1

Сразу же, начало процесса загрузки отображается в терминале A:

Progress: 5242880 / 1080000108
Progress: 10485760 / 1080000108
Progress: 15728640 / 1080000108
...
...
Progress 513802240 / 1080000108

Но когда достигнут прогресс 513802240/1080000108 , мой терминал B (где был сделан запрос скручивания) отображает следующее сообщение:

curl: (52) Empty reply from server

При этом момент, я не нашел ничего «странного» (я представлял себе ошибку тайм-аута), но что меня заинтриговало, так это то, что мой терминал A (сервер) снова получил тот же запрос и продолжил процесс загрузки с того места, где он был оставлен, и что, пока загрузка не завершится:

Progress: 513802240 / 1080000108
::ffff:127.0.0.1 - - [12/Apr/2020:08:50:26 +0000] "GET /api/v1 HTTP/1.1" - - "-" "curl/7.58.0"
Progress: 519045120 / 1080000108
Progress: 524288000 / 1080000108
...
Progress: 1074790400 / 1080000108
Progress: 1080000108 / 1080000108
null { Location:
   'https://my bucket name.s3.eu-west-3.amazonaws.com/1586681306481',
  Bucket: 'my bucket name',
  Key: '1586681306481',
  ETag: '"218ad7075293afb6d725aa60ddcb0142-206"' }

Итак, вот мои следующие вопросы:

  • , которые отправляют тот же запрос на мой сервер, так как мой терминал curl закрыт и получили ответ:

    curl: (52) Пустой ответ от сервера

  • , даже если я понимаю первый пункт, как сервер знает, что он должен перезапустить (если это действительно запускается?) из предыдущего неудачного хода, почему он не перезапускается с начала, так как это может быть еще один запрос от другого пользователя, приходящий

  • дополнительный пункт: я знаю, что могу ускорить загрузку с сжатый gzip файл, но я сначала хотел протестировать без какой-либо оптимизации, а затем мне показалось, что перед тем, как применить gzip-оптимизацию, я сначала понял это странное поведение

Заранее спасибо

1 Ответ

0 голосов
/ 13 апреля 2020

После лога поиска Google и console.log (я всего лишь новичок ie до node.js и s3), я наконец понял, что происходит:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...