пятница, 31 марта 2017 г.

{ [Error: socket hang up] code: 'ECONNRESET' }

Итак вы используйте nodejs (в качестве клиента -http.request) и получаете эту ошибку - отчего?

Для начала нужно вспомнить что такое этот самый продвинутая и современная платформа nodejs.

nodejs - это современная, продвинутая, асинхронная платформа.

Асинхронная - не равно многопоточной. В асинхронной системные действия делаются многопоточно, а затем пользовательские (серверные) действия выполняются последовательно из стека задач.

Т.е. когда выполняется один JS-код на сервере, другой код ждет (и нервно курит). Идеально - что время выполнения кода = 0мс.

Но время выполнения кода (а особенно кода JS - это я вам как разработчик на C/C* говорю) - очень отлично от 0мс.

Теперь рассмотрим ваш неудачный код на nodejs, в котором вы используйте http request для получения данных с сайта, а потом их обрабатываете и получаете иногда (постоянно) ошибку "socket hand up".

Дело в том, что это означает что код вашей обработки запроса превышает таймаут сервера, с которого вы получаете свои данные. Клиент (т.е. вы) не читаете и не закрываете сокет(Socket) (потому что вы ждете это сделать асинхронно в потоке стека задач). И отрубает вас. Об этом, вы кстати, узнаете после того как выполните текущий код.

Решение?
1. Ускорить выполнение кода :)
2. Распаралелить задачу запросов и обработки - через отдельные триды/процессы
3. Использовать другие технологии

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

Отправить комментарий