Express промежуточное программное обеспечение, которое делает асинхронные вызовы

У нас есть приложение NodeJS Express, для которого мы внедрили пользовательский сервер аналитики. Теперь мы решаем, как реализовать механизм отслеживания для браузеров с отключенной JS, таких как обычные телефоны.

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

Другой подход - создать пиксель отслеживания, как это делает аналитика Google, а затем извлечь из него данные. Но это кажется гораздо менее масштабируемым решением для пользовательских решений для отслеживания, так как параметры и структура данных могут изменяться или увеличиваться в любой точке, в отличие от GA.

У меня такой вопрос - есть ли какие-то оборотные стороны в создании промежуточного программного обеспечения, которое выполняет запросы Async? Есть ли что-то, о чем мы должны знать при создании, так как каждый запрос к нашему серверу будет проходить через это промежуточное ПО? У нас довольно большое приложение с трафиком в сотни тысяч в минуту.

1 ответ

Пока вы сохраняете свое промежуточное программное обеспечение асинхронным и вызываете next() Метод, когда это необходимо, вы должны быть в порядке. Express может справиться с небольшой нагрузкой, если для этого настроен экземпляр вашего сервера.

Настоящая проблема заключается в том, что вы начинаете делать синхронные методы, которые вы могли бы / должны использовать обещания для правильной обработки их разрешений.

PROTIP: максимально избегайте вложенных решений обещаний в логике промежуточного программного обеспечения / контроллера. Используйте что-то вроде Bluebird's .all() метод, позволяющий не тратить время на обработку запросов на блокировку, и если вам необходимо выполнить последовательные обратные вызовы, рассмотрите асинхронный водопад или асинхронную серию (в зависимости от выбранной вами библиотеки обещаний), которая позволит вам последовательно запускать разрешения обещаний, если они зависят по предварительной информации. Помогает сохранить ваш код в чистоте.

Другие вопросы по тегам