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

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 ส.ค. 2024
  • Примеры кода: github.com/How...
    Курс «Основы программирования» с примерами на JavaScript habr.com/ru/po...
    #nodejs #http #сервер #роутинг #маршрутизация #кластер #программирование #js

ความคิดเห็น • 36

  • @12312312423
    @12312312423 ปีที่แล้ว +2

    То что нужно)

  • @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

  • @randomtron
    @randomtron 2 ปีที่แล้ว +1

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

    • @TimurShemsedinov
      @TimurShemsedinov  2 ปีที่แล้ว +2

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

  • @CokePaul
    @CokePaul 5 ปีที่แล้ว +2

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

  • @TheLevius
    @TheLevius ปีที่แล้ว

    А я вот не понимаю одного момента. Мы когда отправляем ссылку на сокет в воркер через 'message' и апдейтим сервер в него, с последующим эмитом 'connection', что произойдет если в этот момент на балансер придет еще запрос, а http сервер на воркере еще не обработал запрос, он обработается нормально? мы же запишем уже другой сервер в сокет. Можно пояснить этот момент?

  • @PerfectSwingDance
    @PerfectSwingDance 5 ปีที่แล้ว

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

    • @TimurShemsedinov
      @TimurShemsedinov  5 ปีที่แล้ว

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

    • @PerfectSwingDance
      @PerfectSwingDance 5 ปีที่แล้ว

      @@TimurShemsedinov 32:53

    • @PerfectSwingDance
      @PerfectSwingDance 5 ปีที่แล้ว

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

    • @TimurShemsedinov
      @TimurShemsedinov  5 ปีที่แล้ว

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

  • @igorsavelev9013
    @igorsavelev9013 5 ปีที่แล้ว +6

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

    • @TimurShemsedinov
      @TimurShemsedinov  5 ปีที่แล้ว +12

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

    • @user-qp6yp4qk9i
      @user-qp6yp4qk9i 4 ปีที่แล้ว +3

      Java is a crap. lol

  • @dmytroyurchenko200
    @dmytroyurchenko200 ปีที่แล้ว

    вопрос касательно обработчика 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 ปีที่แล้ว +1

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

    • @TimurShemsedinov
      @TimurShemsedinov  ปีที่แล้ว

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

    • @TimurShemsedinov
      @TimurShemsedinov  ปีที่แล้ว

      Дуже раджу це подивитись th-cam.com/video/-az912XBCu8/w-d-xo.html

  • @CokePaul
    @CokePaul 5 ปีที่แล้ว +2

    routing is simple and amazing

    • @TimurShemsedinov
      @TimurShemsedinov  5 ปีที่แล้ว +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: th-cam.com/video/d_vyO2CkiOc/w-d-xo.html and th-cam.com/video/O7A9chb573E/w-d-xo.html I'll publish special lecture to clarify this issue.

  • @user-qp6yp4qk9i
    @user-qp6yp4qk9i 4 ปีที่แล้ว +1

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

    • @TimurShemsedinov
      @TimurShemsedinov  4 ปีที่แล้ว +1

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

    • @user-qp6yp4qk9i
      @user-qp6yp4qk9i 4 ปีที่แล้ว

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

    • @user-qp6yp4qk9i
      @user-qp6yp4qk9i 4 ปีที่แล้ว

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

    • @TimurShemsedinov
      @TimurShemsedinov  4 ปีที่แล้ว +1

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