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

Поделиться
HTML-код
  • Опубликовано: 1 окт 2024
  • Примеры кода: github.com/How...
    Курс «Основы программирования» с примерами на JavaScript habr.com/ru/po...
    #nodejs #http #сервер #роутинг #маршрутизация #кластер #программирование #js

Комментарии • 36

  • @igorsavelev9013
    @igorsavelev9013 5 лет назад +6

    Почему Марк Аврелий так плохо относится к Java?)

    • @TimurShemsedinov
      @TimurShemsedinov  5 лет назад +12

      Марк Аврелий любит мультипарадигменное программирование, как он может любить язык, в котором все парадигмы нужно реализовывать через ООП

    • @HowManyShrimps-g7z
      @HowManyShrimps-g7z 4 года назад +3

      Java is a crap. lol

  • @metalcorewitchkhousovitch5774
    @metalcorewitchkhousovitch5774 5 лет назад +7

    Очень интересно смотреть реализацию важнейших механизмов веб-сервера на нативе, благодарю!)
    Только, что это за редактор, а-ля "ностальджи"?)

    • @TimurShemsedinov
      @TimurShemsedinov  5 лет назад

      Ну вот завтра будет лекция по сессиям и кукам и постепенно по всем темам для нативной реализации с5рвера пройдем

    • @TimurShemsedinov
      @TimurShemsedinov  5 лет назад +1

      ru.wikipedia.org/wiki/Midnight_Commander

    • @bogdanpavlovskiy3953
      @bogdanpavlovskiy3953 4 года назад +1

      @@TimurShemsedinov Очень интересно как вы работаете в данном редакторе в действительно over больших проектах. Там где куча файлов не считая node модулей. Например как вы обходитесь без поиска по проекту, удобного ui для git конфликтов, и так далее

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +4

      @@bogdanpavlovskiy3953 в этом редакторе есть поиск по файлам и каталогам, даже по маскам и регулярным выражениям, есть замена. Все операции с git я делаю в консоли, и вообще большинство профессионалов не используют для гита UI и все делают в консоли, даже работая при этом в сложных IDE, потому, что из UI доступны 10% всех возможностей гита, вот как вы делаете cherry-pick, interactive rebase, fixup commits, squash, изменение remote и прочее?

    • @kombuchamp
      @kombuchamp 4 года назад +3

      @@TimurShemsedinov Ну, на самом деле, все, что Вы перечислили, можно сделать в webstorm. Хотя вот например bisect сделать нельзя.

  • @Jaood_xD
    @Jaood_xD 2 года назад +2

    40:08 "Благодаря библиотечке 'cluster' createServer сделается только в master-процессе...". Звучит как эдакая "магия", при чём контринтуитивная. Подскажите, пожалуйста, какие-то источники и статьи, в которых подробнее об этом можно почитать. Спасибо

    • @TimurShemsedinov
      @TimurShemsedinov  2 года назад +1

      Только исходники ноды github.com/nodejs/node/tree/main/lib/internal/cluster

  • @12312312423
    @12312312423 Год назад +2

    То что нужно)

  • @nix7705
    @nix7705 Год назад +1

    Дуже цікаво, але мабуть як теорія щоб розуміти як воно працює всередині тих же фреймворків, бо якщо пройтися по вакансіям усі вимагають фреймворки

    • @TimurShemsedinov
      @TimurShemsedinov  Год назад

      Ну от почитайте питания на інтерв'ю які я разповсюджую як галузевий стандарт github.com/tshemsedinov/NodeJS-Interview-Questions

    • @TimurShemsedinov
      @TimurShemsedinov  Год назад

      Дуже раджу це подивитись ruclips.net/video/-az912XBCu8/видео.html

  • @randomtron
    @randomtron 3 года назад +1

    Почему на 29:49 вы говорите, что у нас синхронный сервер? Разве сам факт того, что мы передаём в createServer коллбэк, не делает его асинхронным?

    • @TimurShemsedinov
      @TimurShemsedinov  3 года назад +2

      Чуть ранише на минуту отмотайте и пепесмотрите. Там все функции на роутинге синхронные

  • @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 года назад +2

      Не станет, код не становится асинхронным от использования асинхронных контрактов (колюеков, промисов, async/await, асинхронных итераторов и т.д.), нужно, чтобы в коде были операции ввода-вывода, которые разрывают последовательное выполнение потока js-кода. Смотрите курс по асинхронному программированию.

  • @HowManyShrimps-g7z
    @HowManyShrimps-g7z 4 года назад +1

    Как запускать сервер на node?

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +1

      Если это не понятно, то нужно смотреть это видео, например, на 4:40 я запускаю

    • @HowManyShrimps-g7z
      @HowManyShrimps-g7z 4 года назад

      @@TimurShemsedinov проморгал. Спасибо.

    • @HowManyShrimps-g7z
      @HowManyShrimps-g7z 4 года назад

      @@TimurShemsedinov 21:55 возраст не обновляется потому, что мы передаем число, а не функцию?

    • @TimurShemsedinov
      @TimurShemsedinov  4 года назад +1

      @@HowManyShrimps-g7z да, потому, что число это скаляр, а функция передается по ссылке. Посмотрите мои вводные лекции в программирование и в JavaScript, чтоб таких вопросов не возникало при использовании ноды.

  • @PerfectSwingDance
    @PerfectSwingDance 5 лет назад

    2 вопроса касательно лекции
    1) В сериализаторе types необходимо писать уже асинхронный код? (async/await, promises, запрсы к бд и стороннему API)
    2) Как все-таки можно избежать рекурсии в serve функции
    Спасибо

    • @TimurShemsedinov
      @TimurShemsedinov  5 лет назад

      1. Насколько я помню, в этой лекции у меня все примеры имеют или синхронные сериализаторы или асинхронные на колбеках. Можно делать и на промисах или асин-эвейтах, но я не понимаю, почему у Вас в скобках написано в вопросе о сериализаторах про запросы к БД и АПИ. В новой лекции по АПИ сериализаторы я вообще убрал: ruclips.net/video/-az912XBCu8/видео.html
      2. В каком именно примере рекурсия, можно ссылку на пример или время в видео?

    • @PerfectSwingDance
      @PerfectSwingDance 5 лет назад

      @@TimurShemsedinov 32:53

    • @PerfectSwingDance
      @PerfectSwingDance 5 лет назад

      @@TimurShemsedinov Подразумеваю, что можно реализовать с помощью async/await или же через promisы сторонние запросы (к бд, к API)? Или так лучше не делать?

    • @TimurShemsedinov
      @TimurShemsedinov  5 лет назад

      @@PerfectSwingDance сторонние запросы можно и нужно делать, но в обработчиках, а не на сериализаторе

  • @CokePaul
    @CokePaul 6 лет назад +2

    Небольшая поправка для regexp:
    вместо `const rx = new RegExp(key.replace('*', '(.*)'))`
    стоит делать `const rx = new RegExp(key.replace(/\*/g, '(.*)'))`, чтобы все параметры вошли в массив.
    Также интересует вопрос - стоит ли расширять резолверы типов добавлением хедеров с ContentType?

  • @CokePaul
    @CokePaul 6 лет назад +2

    routing is simple and amazing

    • @TimurShemsedinov
      @TimurShemsedinov  6 лет назад +3

      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.