Итак вы используйте nodejs (в качестве клиента -http.request) и получаете эту ошибку - отчего?
Для начала нужно вспомнить что такое этот самый продвинутая и современная платформа nodejs.
nodejs - это современная, продвинутая, асинхронная платформа.
Асинхронная - не равно многопоточной. В асинхронной системные действия делаются многопоточно, а затем пользовательские (серверные) действия выполняются последовательно из стека задач.
Т.е. когда выполняется один JS-код на сервере, другой код ждет (и нервно курит). Идеально - что время выполнения кода = 0мс.
Но время выполнения кода (а особенно кода JS - это я вам как разработчик на C/C* говорю) - очень отлично от 0мс.
Теперь рассмотрим ваш неудачный код на nodejs, в котором вы используйте http request для получения данных с сайта, а потом их обрабатываете и получаете иногда (постоянно) ошибку "socket hand up".
Дело в том, что это означает что код вашей обработки запроса превышает таймаут сервера, с которого вы получаете свои данные. Клиент (т.е. вы) не читаете и не закрываете сокет(Socket) (потому что вы ждете это сделать асинхронно в потоке стека задач). И отрубает вас. Об этом, вы кстати, узнаете после того как выполните текущий код.
Решение?
1. Ускорить выполнение кода :)
2. Распаралелить задачу запросов и обработки - через отдельные триды/процессы
3. Использовать другие технологии
Для начала нужно вспомнить что такое этот самый продвинутая и современная платформа nodejs.
nodejs - это современная, продвинутая, асинхронная платформа.
Асинхронная - не равно многопоточной. В асинхронной системные действия делаются многопоточно, а затем пользовательские (серверные) действия выполняются последовательно из стека задач.
Т.е. когда выполняется один JS-код на сервере, другой код ждет (и нервно курит). Идеально - что время выполнения кода = 0мс.
Но время выполнения кода (а особенно кода JS - это я вам как разработчик на C/C* говорю) - очень отлично от 0мс.
Теперь рассмотрим ваш неудачный код на nodejs, в котором вы используйте http request для получения данных с сайта, а потом их обрабатываете и получаете иногда (постоянно) ошибку "socket hand up".
Дело в том, что это означает что код вашей обработки запроса превышает таймаут сервера, с которого вы получаете свои данные. Клиент (т.е. вы) не читаете и не закрываете сокет(Socket) (потому что вы ждете это сделать асинхронно в потоке стека задач). И отрубает вас. Об этом, вы кстати, узнаете после того как выполните текущий код.
Решение?
1. Ускорить выполнение кода :)
2. Распаралелить задачу запросов и обработки - через отдельные триды/процессы
3. Использовать другие технологии