HTTP сервер на Node.js (routing, cluster, IP sticky)

  Рет қаралды 16,985

Timur Shemsedinov

Timur Shemsedinov

Күн бұрын

Пікірлер: 36
@12312312423
@12312312423 Жыл бұрын
То что нужно)
@metalcorewitchkhousovitch5774
@metalcorewitchkhousovitch5774 5 жыл бұрын
Очень интересно смотреть реализацию важнейших механизмов веб-сервера на нативе, благодарю!) Только, что это за редактор, а-ля "ностальджи"?)
@TimurShemsedinov
@TimurShemsedinov 5 жыл бұрын
Ну вот завтра будет лекция по сессиям и кукам и постепенно по всем темам для нативной реализации с5рвера пройдем
@TimurShemsedinov
@TimurShemsedinov 5 жыл бұрын
ru.wikipedia.org/wiki/Midnight_Commander
@bogdanpavlovskiy3953
@bogdanpavlovskiy3953 4 жыл бұрын
@@TimurShemsedinov Очень интересно как вы работаете в данном редакторе в действительно over больших проектах. Там где куча файлов не считая node модулей. Например как вы обходитесь без поиска по проекту, удобного ui для git конфликтов, и так далее
@TimurShemsedinov
@TimurShemsedinov 4 жыл бұрын
@@bogdanpavlovskiy3953 в этом редакторе есть поиск по файлам и каталогам, даже по маскам и регулярным выражениям, есть замена. Все операции с git я делаю в консоли, и вообще большинство профессионалов не используют для гита UI и все делают в консоли, даже работая при этом в сложных IDE, потому, что из UI доступны 10% всех возможностей гита, вот как вы делаете cherry-pick, interactive rebase, fixup commits, squash, изменение remote и прочее?
@kombuchamp
@kombuchamp 4 жыл бұрын
@@TimurShemsedinov Ну, на самом деле, все, что Вы перечислили, можно сделать в webstorm. Хотя вот например bisect сделать нельзя.
@Jaood_xD
@Jaood_xD 2 жыл бұрын
40:08 "Благодаря библиотечке 'cluster' createServer сделается только в master-процессе...". Звучит как эдакая "магия", при чём контринтуитивная. Подскажите, пожалуйста, какие-то источники и статьи, в которых подробнее об этом можно почитать. Спасибо
@TimurShemsedinov
@TimurShemsedinov 2 жыл бұрын
Только исходники ноды github.com/nodejs/node/tree/main/lib/internal/cluster
@PerfectSwingDance
@PerfectSwingDance 5 жыл бұрын
2 вопроса касательно лекции 1) В сериализаторе types необходимо писать уже асинхронный код? (async/await, promises, запрсы к бд и стороннему API) 2) Как все-таки можно избежать рекурсии в serve функции Спасибо
@TimurShemsedinov
@TimurShemsedinov 5 жыл бұрын
1. Насколько я помню, в этой лекции у меня все примеры имеют или синхронные сериализаторы или асинхронные на колбеках. Можно делать и на промисах или асин-эвейтах, но я не понимаю, почему у Вас в скобках написано в вопросе о сериализаторах про запросы к БД и АПИ. В новой лекции по АПИ сериализаторы я вообще убрал: kzbin.info/www/bejne/Y5LdamRojad2q5o 2. В каком именно примере рекурсия, можно ссылку на пример или время в видео?
@PerfectSwingDance
@PerfectSwingDance 5 жыл бұрын
@@TimurShemsedinov 32:53
@PerfectSwingDance
@PerfectSwingDance 5 жыл бұрын
@@TimurShemsedinov Подразумеваю, что можно реализовать с помощью async/await или же через promisы сторонние запросы (к бд, к API)? Или так лучше не делать?
@TimurShemsedinov
@TimurShemsedinov 5 жыл бұрын
@@PerfectSwingDance сторонние запросы можно и нужно делать, но в обработчиках, а не на сериализаторе
@TheLevius
@TheLevius Жыл бұрын
А я вот не понимаю одного момента. Мы когда отправляем ссылку на сокет в воркер через 'message' и апдейтим сервер в него, с последующим эмитом 'connection', что произойдет если в этот момент на балансер придет еще запрос, а http сервер на воркере еще не обработал запрос, он обработается нормально? мы же запишем уже другой сервер в сокет. Можно пояснить этот момент?
@dmytroyurchenko200
@dmytroyurchenko200 2 жыл бұрын
вопрос касательно обработчика 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 ?
@TimurShemsedinov
@TimurShemsedinov 2 жыл бұрын
Не станет, код не становится асинхронным от использования асинхронных контрактов (колюеков, промисов, async/await, асинхронных итераторов и т.д.), нужно, чтобы в коде были операции ввода-вывода, которые разрывают последовательное выполнение потока js-кода. Смотрите курс по асинхронному программированию.
@nix7705
@nix7705 Жыл бұрын
Дуже цікаво, але мабуть як теорія щоб розуміти як воно працює всередині тих же фреймворків, бо якщо пройтися по вакансіям усі вимагають фреймворки
@TimurShemsedinov
@TimurShemsedinov Жыл бұрын
Ну от почитайте питания на інтерв'ю які я разповсюджую як галузевий стандарт github.com/tshemsedinov/NodeJS-Interview-Questions
@TimurShemsedinov
@TimurShemsedinov Жыл бұрын
Дуже раджу це подивитись kzbin.info/www/bejne/Y5LdamRojad2q5o
@randomtron
@randomtron 3 жыл бұрын
Почему на 29:49 вы говорите, что у нас синхронный сервер? Разве сам факт того, что мы передаём в createServer коллбэк, не делает его асинхронным?
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
Чуть ранише на минуту отмотайте и пепесмотрите. Там все функции на роутинге синхронные
@igorsavelev9013
@igorsavelev9013 5 жыл бұрын
Почему Марк Аврелий так плохо относится к Java?)
@TimurShemsedinov
@TimurShemsedinov 5 жыл бұрын
Марк Аврелий любит мультипарадигменное программирование, как он может любить язык, в котором все парадигмы нужно реализовывать через ООП
@HowManyShrimps-g7z
@HowManyShrimps-g7z 5 жыл бұрын
Java is a crap. lol
@CokePaul
@CokePaul 6 жыл бұрын
Небольшая поправка для regexp: вместо `const rx = new RegExp(key.replace('*', '(.*)'))` стоит делать `const rx = new RegExp(key.replace(/\*/g, '(.*)'))`, чтобы все параметры вошли в массив. Также интересует вопрос - стоит ли расширять резолверы типов добавлением хедеров с ContentType?
@CokePaul
@CokePaul 6 жыл бұрын
routing is simple and amazing
@TimurShemsedinov
@TimurShemsedinov 6 жыл бұрын
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: kzbin.info/www/bejne/mpDZqoJoeNCchcU and kzbin.info/www/bejne/hWikapael5pqaac I'll publish special lecture to clarify this issue.
@HowManyShrimps-g7z
@HowManyShrimps-g7z 5 жыл бұрын
Как запускать сервер на node?
@TimurShemsedinov
@TimurShemsedinov 5 жыл бұрын
Если это не понятно, то нужно смотреть это видео, например, на 4:40 я запускаю
@HowManyShrimps-g7z
@HowManyShrimps-g7z 5 жыл бұрын
@@TimurShemsedinov проморгал. Спасибо.
@HowManyShrimps-g7z
@HowManyShrimps-g7z 5 жыл бұрын
@@TimurShemsedinov 21:55 возраст не обновляется потому, что мы передаем число, а не функцию?
@TimurShemsedinov
@TimurShemsedinov 5 жыл бұрын
@@HowManyShrimps-g7z да, потому, что число это скаляр, а функция передается по ссылке. Посмотрите мои вводные лекции в программирование и в JavaScript, чтоб таких вопросов не возникало при использовании ноды.
Межпроцессовое взаимодействие в Node.js
46:11
Cluster vs PM2 vs Worker Threads - масштабируем правильно
18:50
devschacht “Девшахта”
Рет қаралды 17 М.
When u fight over the armrest
00:41
Adam W
Рет қаралды 32 МЛН
HTTP запросы в браузере и Node.js: XMLHttpRequest, fetch
31:17
HTTP сессии и cookies на чистом Node.js
1:39:15
Timur Shemsedinov
Рет қаралды 12 М.
Скаффолдинг для API, UI и данных
31:03
Timur Shemsedinov
Рет қаралды 5 М.
Scaling your Node.js app using the "cluster" module
13:44
Software Developer Diaries
Рет қаралды 48 М.
PROOF JavaScript is a Multi-Threaded language
8:21
Beyond Fireship
Рет қаралды 290 М.
Building HTTP Server in NodeJS
17:56
Piyush Garg
Рет қаралды 153 М.
Клиент-сервер на Node.js TCP и UDP, DNS
51:22
Timur Shemsedinov
Рет қаралды 18 М.