2016-01-05 3 views
0

Как я могу позвонить внешнему API, чтобы сохранить их асинхронными?Node.js делает асинхронные вызовы API в кусках

Ошибка в том, что мне нужно сделать пару миллионов звонков, поэтому я хотел бы отправить 10 из них в то время, и как только кто-нибудь из них вернется, отправьте еще один, и продолжайте делать это до тех пор, пока все из них полны.

Так что это похоже на запуск 10 потоков одновременно.

+0

Почему вы хотите ограничить 10? – thefourtheye

+0

https://github.com/caolan/async#parallel –

+0

Похоже на разумную сумму. Вероятно, 100 тоже будет хорошо. Запросы должны быть разделены, а не отправлять тысячи вызовов одновременно. – Adam

ответ

0

Если вы используете request.js вы можете также использовать параметр конфигурации пула, который ограничивает невыполненные запросы

В request.js

бассейн: { maxSockets: 10 }

https://github.com/request/request

agent - http (s). Экземпляр для использования agentClass - альтернативно укажите имя вашего агента agentOptions - и передайте его параметры. Примечание: для HTTPS см. Dls API tls для параметров TLS/SSL и приведенную выше документацию. forever - установить значение true для использования вечного агента. Примечание. По умолчанию для http (s) .Agent ({keepAlive: true}) в узле 0.12+ пул - объект, описывающий, какие агенты использовать для запроса. Если этот параметр опущен, запрос будет использовать глобальный агент (если это позволяют ваши варианты). В противном случае запрос будет искать пул для вашего настраиваемого агента. Если пользовательский агент не найден, новый агент будет создан и добавлен в пул. Примечание: пул используется только тогда, когда параметр агента не указан. Свойство maxSockets также может быть предоставлено в объекте пула для установки максимального количества сокетов для всех созданных агентов (например: пул: {maxSockets: Infinity}). Обратите внимание, что если вы отправляете несколько запросов в цикле и создаете несколько новых объектов пула, maxSockets не будет работать должным образом. Чтобы обойти это, либо используйте request.defaults с параметрами пула, либо создайте объект пула с свойством maxSockets вне цикла. timeout - Целое число, содержащее миллисекунды, чтобы дождаться, когда сервер отправит заголовки ответов (и запустит тело ответа), прежде чем прерывать запрос. Обратите внимание, что если базовое TCP-соединение не может быть установлено, тайм-аут соединения по всей ОС будет отменять параметр таймаута (по умолчанию в Linux может быть от 20 до 120 секунд).