Как использовать несколько JSON из запроса проверки активности HTTP? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть веб-сервер узла, который прослушивает

this.app.use('/register-receiver', (req, res) => {
  const receiverId = req.query.id;
  res.status(200).set({
    connection: 'keep-alive',
    'Cache-Control': 'no-cache',
    'Content-Type': 'application/json',
  });
  this.receivers[receiverId] = res;
});

Он периодически отправляет полезную нагрузку JSON клиентам, подключенным к /register-receiver с

this.receivers[receiverId].write(JSON.stringify({
  // some big json
}))

У меня есть другая программа узла, котораядействует как клиент, который при подключении устанавливает соединение с сервером.

const options = {
  agent: false,
  host: <my host>,
  defaultPort: <my port>
  path: `/register-receiver?id=${activeConfig.receiver.id}`
  headers: {
    connection: 'keep-alive',
    'Content-Type': 'application/json',
  }
};

http.get(options, res => {
  res.setEncoding('utf8');
  res.on('data', data => {
    try {
      const response = JSON.parse(data);
      // do stuff with response
    } catch(e) {
      console.log(`error ${e} with ${data}`);
    }
  });
  res.on('end', () => console.log(`connection finished`) )
})

Сервер должен периодически отправлять полезные нагрузки JSON клиенту.Клиент должен получить эти JSON и что-то с ними сделать.Однако проблема заключается в том, что большие записи JSON разбиваются на части так, что клиент будет получать JSON по частям.Это нарушает JSON.parse(data), и теперь клиент не знает, как обрабатывать данные сервера.Я не могу полагаться на res.on('end'), чтобы определить завершение фрагментированной записи, потому что это запрос поддержки активности, который должен оставаться открытым всегда.

Я хочу избежать разработки собственного протокола для объединения фрагментов JSONиз-за его сложности.Это не так просто, как объединение строк, поскольку я мог бы чередовать фрагменты JSON, если сервер отправляет 2 большие полезные нагрузки JSON одновременно.

Можно ли заставить сервер записать весь JSON как 1 блок впоток?Как я могу настроить мой клиент так, чтобы он устанавливал «навсегда» соединение с моим сервером и слушал полные полезные нагрузки JSON?

...