HTTP сервер на Node.js (routing, cluster, IP sticky)
HTML-код
- Опубликовано: 1 окт 2024
- Примеры кода: github.com/How...
Курс «Основы программирования» с примерами на JavaScript habr.com/ru/po...
#nodejs #http #сервер #роутинг #маршрутизация #кластер #программирование #js
Почему Марк Аврелий так плохо относится к Java?)
Марк Аврелий любит мультипарадигменное программирование, как он может любить язык, в котором все парадигмы нужно реализовывать через ООП
Java is a crap. lol
Очень интересно смотреть реализацию важнейших механизмов веб-сервера на нативе, благодарю!)
Только, что это за редактор, а-ля "ностальджи"?)
Ну вот завтра будет лекция по сессиям и кукам и постепенно по всем темам для нативной реализации с5рвера пройдем
ru.wikipedia.org/wiki/Midnight_Commander
@@TimurShemsedinov Очень интересно как вы работаете в данном редакторе в действительно over больших проектах. Там где куча файлов не считая node модулей. Например как вы обходитесь без поиска по проекту, удобного ui для git конфликтов, и так далее
@@bogdanpavlovskiy3953 в этом редакторе есть поиск по файлам и каталогам, даже по маскам и регулярным выражениям, есть замена. Все операции с git я делаю в консоли, и вообще большинство профессионалов не используют для гита UI и все делают в консоли, даже работая при этом в сложных IDE, потому, что из UI доступны 10% всех возможностей гита, вот как вы делаете cherry-pick, interactive rebase, fixup commits, squash, изменение remote и прочее?
@@TimurShemsedinov Ну, на самом деле, все, что Вы перечислили, можно сделать в webstorm. Хотя вот например bisect сделать нельзя.
40:08 "Благодаря библиотечке 'cluster' createServer сделается только в master-процессе...". Звучит как эдакая "магия", при чём контринтуитивная. Подскажите, пожалуйста, какие-то источники и статьи, в которых подробнее об этом можно почитать. Спасибо
Только исходники ноды github.com/nodejs/node/tree/main/lib/internal/cluster
То что нужно)
Дуже цікаво, але мабуть як теорія щоб розуміти як воно працює всередині тих же фреймворків, бо якщо пройтися по вакансіям усі вимагають фреймворки
Ну от почитайте питания на інтерв'ю які я разповсюджую як галузевий стандарт github.com/tshemsedinov/NodeJS-Interview-Questions
Дуже раджу це подивитись ruclips.net/video/-az912XBCu8/видео.html
Почему на 29:49 вы говорите, что у нас синхронный сервер? Разве сам факт того, что мы передаём в createServer коллбэк, не делает его асинхронным?
Чуть ранише на минуту отмотайте и пепесмотрите. Там все функции на роутинге синхронные
А я вот не понимаю одного момента. Мы когда отправляем ссылку на сокет в воркер через 'message' и апдейтим сервер в него, с последующим эмитом 'connection', что произойдет если в этот момент на балансер придет еще запрос, а http сервер на воркере еще не обработал запрос, он обработается нормально? мы же запишем уже другой сервер в сокет. Можно пояснить этот момент?
вопрос касательно обработчика http.createServer((req, res) => {
res.end(router({ req, res }) + '');
}).listen(8000);
в исходнике NodeServer/native-advanced/server.js
Если мы перепишем этот синхронный обработчик просто добавив async (req, res):
http.createServer(async (req, res) => {
res.end(router({ req, res }) + '');
}).listen(8000);
станет ли обработчик асинхронным и не блокирующим приход новых запросов как в исходнике NodeServer/native-async/server.js ?
Не станет, код не становится асинхронным от использования асинхронных контрактов (колюеков, промисов, async/await, асинхронных итераторов и т.д.), нужно, чтобы в коде были операции ввода-вывода, которые разрывают последовательное выполнение потока js-кода. Смотрите курс по асинхронному программированию.
Как запускать сервер на node?
Если это не понятно, то нужно смотреть это видео, например, на 4:40 я запускаю
@@TimurShemsedinov проморгал. Спасибо.
@@TimurShemsedinov 21:55 возраст не обновляется потому, что мы передаем число, а не функцию?
@@HowManyShrimps-g7z да, потому, что число это скаляр, а функция передается по ссылке. Посмотрите мои вводные лекции в программирование и в JavaScript, чтоб таких вопросов не возникало при использовании ноды.
2 вопроса касательно лекции
1) В сериализаторе types необходимо писать уже асинхронный код? (async/await, promises, запрсы к бд и стороннему API)
2) Как все-таки можно избежать рекурсии в serve функции
Спасибо
1. Насколько я помню, в этой лекции у меня все примеры имеют или синхронные сериализаторы или асинхронные на колбеках. Можно делать и на промисах или асин-эвейтах, но я не понимаю, почему у Вас в скобках написано в вопросе о сериализаторах про запросы к БД и АПИ. В новой лекции по АПИ сериализаторы я вообще убрал: ruclips.net/video/-az912XBCu8/видео.html
2. В каком именно примере рекурсия, можно ссылку на пример или время в видео?
@@TimurShemsedinov 32:53
@@TimurShemsedinov Подразумеваю, что можно реализовать с помощью async/await или же через promisы сторонние запросы (к бд, к API)? Или так лучше не делать?
@@PerfectSwingDance сторонние запросы можно и нужно делать, но в обработчиках, а не на сериализаторе
Небольшая поправка для regexp:
вместо `const rx = new RegExp(key.replace('*', '(.*)'))`
стоит делать `const rx = new RegExp(key.replace(/\*/g, '(.*)'))`, чтобы все параметры вошли в массив.
Также интересует вопрос - стоит ли расширять резолверы типов добавлением хедеров с ContentType?
routing is simple and amazing
But note that route handlers still should not contain business logic, only calls to submodule with business logic because mixing network, db, business, math, rendering, security, logging etc. to a single handler is not a good idea. See terrible example here: github.com/HowProgrammingWorks/AbstractionLayers/blob/master/JavaScript/badServer.js and following: ruclips.net/video/d_vyO2CkiOc/видео.html and ruclips.net/video/O7A9chb573E/видео.html I'll publish special lecture to clarify this issue.