2014-11-09 2 views
1

Node.js однопоточный. Если медленный клиент делает запрос, я предполагаю, что он может заблокировать поток до его завершения. Имеет ли это смысл ?Как обрабатывать медленные клиентские соединения в node.js?

Как обрабатывать медленные соединения? Имеет ли смысл просто прекратить соединение, если оно занимает слишком много времени? Как это определить? Как измерять длительность запроса и прекращать его, если он занимает слишком много времени? Я не имею в виду продолжительность, на которую требуется отправить ответ. Я просто ссылаюсь на время, необходимое узлу для получения всех данных, необходимых для обработки запроса. Это законный сценарий?

Я предполагаю, что должен быть какой-то способ сделать это, в противном случае было бы очень легко DOS атаки у node.js сервера ...

EDIT: В запросе пост, данные поступают в кусковые , Так что, если он просто приходит медленно? Я не уверен, как имитировать это. Но если это проблема в узле, это может быть проблемой в PHP и т. Д., Потому что вам просто нужно вызвать множество соединений, все из которых очень медленны, чтобы атаковать сервер.

ответ

0

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

Вы можете установить тайм-аут бездействия, который срабатывает, если на сокет не будут отображаться данные за требуемый отрезок времени. Для HTTP вы можете установить глобальный тайм-аут запроса через server.setTimeout(), который может автоматически закрыть базовый сокет, или если вы передадите обратный вызов, вы можете обрабатывать таймаут, как хотите. Для TCP существует socket.setTimeout().

+0

Использование одного и того же стека; когда я загружаю тест в своем приложении со SLOW-соединением, максимальное время отклика может увеличиться до 30 секунд. Но когда я делаю это с быстрым соединением, максимальное время отклика составляет 1 секунду. Если речь идет не о медленном соединении, какова будет причина, по которой вы думаете? – scaryguy

Смежные вопросы