Как предотвратить блокировку с помощью JSON.stringify в nodejs?

#json #node.js #stringify

#json #node.js #stringify

Вопрос:

Я написал несколько серверных приложений на основе сокетов, которые принимают данные JSON от многих клиентов. Когда я экспортирую большие (более 20 МБ) данные в файл после JSON.stringify, приложение было заблокировано во время операции stringify. Итак, я хочу предотвратить блокировку с помощью JSON.stringify. Есть ли какая-либо библиотека, которая выполняет stringify без блокировки? или как это выяснить?

Комментарии:

1. Может быть, использовать worker или разветвить новый процесс или что-то в этом роде? Кроме того, в вашем случае все звучит понятно, но всегда полезно привести какой-нибудь пример кода, даже если это очевидный однострочник.

2. Спасибо. Я читал о «кластере» на узле js. Я попробую балансировку нагрузки на четырехъядерной машине.

3. Кластер хорош, но он все еще блокируется. Я имел в виду использование web worker — взгляните на пример реализации.

Ответ №1:

Существуют модули npm, которые предлагают асинхронные API-интерфейсы JSON. Смотрите, например:

  • JSONStream, который имеет потоковые API.
  • Дружественный к большому JSON, который имеет потоковые API, а также асинхронные версии стандартных API-интерфейсов JSON, использующие парадигму разбиения на события, описанную ниже.

Ссылка: https://nodejs.org/en/docs/guides/dont-block-the-event-loop/#blocking-the-event-loop-json-dos