2015-06-23 2 views
0

Я знаю, что «блокировка» серверных архитектур, таких как Rails, требует от вас выгружать временные внешние вызовы API рабочим процессам (т. Е. Очереди заданий), чтобы предотвратить их блокирование серверного процесса.Необходимы ли рабочие процессы для внешних вызовов API в node.js?

Это также случай для node.js? Или его «неблокирующая» архитектура означает, что он может иметь незавершенные внешние вызовы API, не отклоняя или замедляя последующие запросы сервера?

ответ

0

Неблокирующий характер node.js и реализация базовой сети в node.js не использует поток для внешнего вызова API и является очень эффективной реализацией для этого типа доступа.

Это также случай для node.js? Или его «неблокирующая» архитектура означает, что она может иметь неполные внешние API-вызовы в , не отменяя или замедляя последующие запросы сервера?

Нет, это не относится к node.js. Это неблокирующий характер для сетей будет обрабатывать это для вас без каких-либо «замедляющих» последствий.

Есть, конечно, некоторые системные ресурсы, потребляемые за каждый открытый сокет, а node.js может сам применять некоторые ограничения на количество сокетов, которые он откроет одновременно (я думаю, что модуль http имеет лимит, встроенный в этот могут быть настроены), но это просто означает, что вы либо должны быть уверены, что не собираетесь запускать большое количество незавершенных сокетов, либо тщательно настраивать параметры конфигурации для своей ситуации.


Просто для полноты картины, есть некоторые виды ввода/вывода в Node.js (например, файл I/O), которые используют внутренний пул потоков и нелипкая характер файла I/O реализуется через фактические потоки, хотя это почти полностью прозрачно для программиста node.js. Но сетевое взаимодействие в node.js не реализовано таким образом (оно использует фактические неблокирующие сокеты).