Экспресс, Socket повесить на высокое исполнение - PullRequest
0 голосов
/ 25 октября 2018

Я работаю над сценарием, который получает данные из API и отображает их в пользовательском интерфейсе, используя Socket.io , этот сценарий запускается одновременно.

const express = require("express");
const app = express();
const http = require("http").Server(app);
const io = require("socket.io")(http);

function mainBody() {
oldTime = new Date().getTime();
// Set the headers
let headers = {
Authorization: "Bearer XXXXXXXXXXX",
"Content-Type": "application/json"
};
let n = 0;
let r = 0;

j = 0;
const handleResultsForRequest = function(err, response, body) {
 if (!err && response.statusCode === 200) {
  const js = JSON.parse(body);
  if (undefined !== JSON.stringify(js)) {
    const data_key = js.eventId + "_" + JSON.parse(body).start;
    data[data_key] = js;
  } else console.log("status code:" + response.statusCode);
}
};

 let array = [
    103307565,
    103771668,
    103621400,
    103675790,
    103887500,
 ];
 itemCal = 0;
 array.forEach(async function(item, index, array) {
 n = 0;
 // Configure the request
 options = {
  url: "https://api.XXXXXXXXXXXXX",
  method: "GET",
  headers: headers,
  qs: { eventId: item, pricingsummary: true, rows: "250", start: n }
};
Request(options, function(err, response, body) {
  itemCal++;
  if (err) {
    console.log("ERROR: " + err);
  } else {
    try {
      const js = JSON.parse(body);
      r = js.totalListings;
      r = Math.floor(r / 250) + 1;
      n = 0;
      for (let i = 0; i < r; i++) {
        // Configure the request
        options = {
          url:
            "https://api.XXXXXXXXXXXXXXXXXXXX",
          method: "GET",
          headers: headers,
          qs: { eventId: item, pricingsummary: true, rows: "250", start: n }
        };
        n += 250;
        Request(options, handleResultsForRequest);
      }
    } catch (e) {
      console.log(e);
    }
  }
  if (itemCal == array.length) {
    var currentTime = new Date().getTime();
    io.emit("data",diff);
    mainBody();
  }
});
});
}
mainBody();

В файле есть массив с 5 идентификаторамикоторые выполняются в цикле и в конце скрипта после выполнения всех циклов, есть socket.emit () и после emit data, mainBody () запускается снова, и это выполнение будет выполняться непрерывно и передавать данные клиенту при каждом выполнении.

Проблема: В настоящее время в примере с 5 идентификаторами в массиве я показываю, что этот сценарий работает нормально до 500 идентификаторов, но я поставил более 500 - 550 идентификаторов, а затем его возвращение с этой ошибкой.

socket hang up
    at createHangUpError (_http_client.js:331:15)
    at TLSSocket.socketOnEnd (_http_client.js:423:23)
    at emitNone (events.js:111:20)
    at TLSSocket.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickCallback (internal/process/next_tick.js:181:9) code: 'ECONNRESET' }

И перестал передавать данные клиенту.Любая помощь будет признательна.:) Заранее спасибо.

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