Kons
Если речь идёт об express-сервере (а, судя по всему, это так), и если это некий REST API, то так возвращать ошибку можно. Метод status, вызванный с числом, выставит HTTP Status Code ответа — http://expressjs.com/ru/api.html#res.status
Андрей
Кидай error
В том то и вопрос, как правильно кинуть?
Igor
Throw в смысле
Igor
Throw new error()
Kons
Можно и кинуть исключение, но тогда процесс упадет.
Igor
А в обработчике генерируй ответ по шаблону
Igor
В koa для этого есть throwError, и errorHandler, или как то так, покури доку
Igor
Error Handling · koajs/koa Wiki https://github.com/koajs/koa/wiki/Error-Handling
Igor
Вот пример
Alexander
он говорит условний Вася запрашивает некую страницу и пока он ждет другие посетители не смогут запрашивать эту страницу потому что интерпитатор nodejs занять
Он прав. Пока обрабатывается запрос одного пользователя, другие просто стоят в очереди. Но как только в обработчике запроса от одного пользователя выполнится что-то асинхронное, в момент выполнения асинхронной задачи начнется выполнение обработчика другого пользователя.
Alexander
Вроде как
Андрей
Вот пример
А в express?
Igor
А в express?
Тебе ссылку на документацию дать?
ixplo
https://www.npmjs.com/package/just-router
ixplo
роутер написан
ixplo
кидайте помидоры ) может глючить и вообще не работать
ikasymov
Мне надо еще хорошенко прочитать про tcp ip и сессии так как я думаю для каждого сессии отдельная обработка запросов
ixplo
https://www.npmjs.com/package/just-router
в будущем буду его прилизывать, пулреквесты велком
Alexander
А джс код, который может застопорить процесс, надо паралелить кластером
ikasymov
не то написал
ikasymov
да
Kons
Если мы говорим о том, что шаблон рендерится асинхронно 20 секунд, то да, второй пользователь (если они зашли одновременно с первым) будет ждать 40 секунд до получения ответа.
ikasymov
Вообще-то так и будет
но в питоне то не так
Alexander
но в питоне то не так
А нода и не питон
ikasymov
каждый чел ждет по 20 секунд
ikasymov
но если оба написаны синхронно
Alexander
В том и сила ноды, что для большинства простых типичных задач она не плодит процессы и оч быстро реагирует
Alexander
Потому она и популярна для апи прежде всего
Kons
В питоне нет евентлупа (из коробки)
Kons
принцип работы другой
ikasymov
ну ладно я уже флудить начал мне срочно надо прочитать про архитектуру nodejs tcp ip
ikasymov
спасибо
Kons
Ты слишком глубоко хочешь залезть. Это другой уровень сетевой модели.
Kons
Кстати, сеть тут вообще не при чем
Kons
Это было бы справедливо и для консольного скрипта
Alexander
Да ладно, вдруг ему просто на тсп что-то написать хочется
ikasymov
нет, хочу просто понять на чем езжу)
Kons
Просто если зарываться в TCP/IP, то вряд ли поймешь, как нода работает.
Kons
Т.е. в питоне так же, как и в ноде код выполняется в евент лупе?
Vladimir
Неправда
Aleksand
Неправда
отдельные нити выполнения для i/o не нужны
Vladimir
Нужны для fs
Vladimir
И для dns
Aleksand
Т.е. в питоне так же, как и в ноде код выполняется в евент лупе?
в питоне есть выбор - синхронный или асинхронный i/o, в стандартной библиотеке есть asyncio и если ты используешь его то да
Kons
Я не совсем правильно выразился, но как скажешь.
KlonD90
Да там же есть уровень самого по себе uevent или как там эта библиотека называется которая берет на себя асинхронный ввод вывод
KlonD90
соверешнно забываю как она постояно называется (
Kons
libuv
Aleksand
Нужны для fs
это уже логика libuv и это платформозависимый код
Vladimir
Всет касается io - это логика libuv
Aleksand
И для dns
а можешь показать где это для dns нити в libuv поднимаются? если для файлов еще где-то понятно то почему для dns?
Vladimir
https://github.com/libuv/libuv/blob/1a96fe33343f82721ba8bc93adb5a67ddcf70ec4/src/unix/getaddrinfo.c#L186
ixplo
надо потестить ещё. могут быть баги )
ixplo
с экспрессом буду тестить по скорости после написания модуля статики и обёртки-сервера (самое простое)
Aleksand
https://github.com/libuv/libuv/blob/1a96fe33343f82721ba8bc93adb5a67ddcf70ec4/src/unix/getaddrinfo.c#L186
а зачем в трэдпул? какой мотив для этого?
Vladimir
Потом чту используется блокирующий getaddrinfo
Aleksand
Vladimir
он есть, но не используется по умолчанию
Aleksand
он есть, но не используется по умолчанию
но почему? он же раньше был вместо блокирующего getaddrinfo?
Vladimir
Для лучшей интеграции с ОС
Aleksand
Для лучшей интеграции с ОС
ну это в ущерб получается производительности
Aleksand
короче они забили использовать getaddrinfo_a асинхронный и шедулят все через пул, поэтому надо обязательно использовать UV_THREADPOOL_SIZE, или вообще не использовать стандартный dns
KlonD90
зачем?
Aleksand
зачем?
по умолчанию потоков 4, при попытке зарезолвить сразу 1000 имен все встанет колом, например
Aleksand
но тут вообще лучше забить на стандартный резолвер, и сделать свой через udp, там нет блокирующих вызовов
Aleksand
но больше CPU_NUM * 10 потоков даже для i/o bound операций поднимать не стоит, поэтому dns конечно кроссплатформенный но очень ограниченный выходит
Alexander
Можно ли открыть 2 подключения socket.io? Допустим подключение для чата и чего-то ещё? Или разделение можно реализовать через одно подключение?
Yaroslav 🇺🇦
Друзья, что посоветуете пользовать для xhr или fetch внутри ноды?
Alexander
Друзья, что посоветуете пользовать для xhr или fetch внутри ноды?
Лол что? xhr нужен для запросов с клиента на сервер