Web сокеты | Компьютерные сети. Продвинутые темы

Поделиться
HTML-код
  • Опубликовано: 1 июн 2019
  • Курс "Компьютерные сети" , лекция по Web сокетам.
    Презентация видеолекции - www.asozykin.ru/assets/pdf/ne...
    Web сокеты - это протокол прикладного уровня стека TCP/IP, предназначенный для создания Web приложений реального времени.
    Основное отличие Web сокетов от HTTP заключается в том, что в Web сокетах создается двунаправленное соединение между клиентом и сервером. По этому соединению клиент и сервер могут отправлять данные друг другу в любое время.
    Web сокеты определены в стандарте RFC 6455 "The WebSocket Protocol" - tools.ietf.org/html/rfc6455
    Работа Web сокетов состоит из двух этапов:
    - Установка соединения. В целях поддержки существующей инфраструктуры Web используется подход HTTP со сменой (urgrade) протокола на Web сокеты.
    - Передача данных. Для передачи данных используется постоянное TCP соединение между клиентом и сервером. Данные передаеются в виде кадров (frames), имеющих бинарные заголовки.
    В лекции рассматривается процесс установки соединения Web сокетов, формат кадра Web сокетов и другие темы, относящиеся к работе Web сокетов.
    Видеолекция по протоколу HTTP - • Протокол HTTP | Курс "...
    Видеолекция по протоколу TCP - • Протокол TCP | Курс "К...
    Как можно поддержать курс:
    1. Яндекс Кошелек - money.yandex.ru/to/4100142982...
    2. PayPal - www.paypal.me/asozykin
    Заранее спасибо за помощь!
    Добавляйтесь в друзья в социальных сетях:
    вКонтакте - avsozykin
    Facebook - / asozykin
    Twitter - / andreysozykin
    Мой сайт - www.asozykin.ru
    Мой канал с краткими и понятными объяснениями сложных тем в ИТ и компьютерных науках -
    goo.gl/kW93MA
  • НаукаНаука

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

  • @skatskau1102
    @skatskau1102 5 лет назад +102

    Спасибо. Как всегда локанично, без воды.

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

      Пожалуйста!

    • @user-iu7eq5yx4k
      @user-iu7eq5yx4k 2 года назад +3

      @@AndreySozykin Даже спустя 2 года очень полезно =)

    • @user-hw9qv9my3l
      @user-hw9qv9my3l Год назад +1

      лАкОнично, грамотей!

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

      ​​@@user-hw9qv9my3lе душни чел противно читать. все равно человеку, который написал коммент все равно на тебя

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

    Одни из лучших лекций на просторах инета! Спасибо!

  • @digital-music-artist
    @digital-music-artist Год назад +1

    как раз то видео, когда раз посмотрела и поняла, и запомнила, и не нужно еще искать видео смотреть на эту тему для закрепления. четко понятно становится сразу на примерах

  • @xenonist4502
    @xenonist4502 5 лет назад +4

    Как же интересно и хорошо рассказано! Спасибо) А сокеты мне нравятся)

  • @limitless6216
    @limitless6216 2 года назад +7

    Просто отличная подача! Спасибо и побольше вам здоровья в это непростое время =)

  • @user-kx7to4on6x
    @user-kx7to4on6x 4 года назад +10

    Андрей, огромное спасибо за видео! Все встало на свои места!

  • @user-gb9ik8qq9w
    @user-gb9ik8qq9w 3 года назад +10

    Спасибо. Гораздо легче воспринимать информацию, когда информация доносится размеренно и четко

  • @user-pd2bd3wo4s
    @user-pd2bd3wo4s 2 года назад +4

    Очень понравился структура материала и презентация. Спасибо за труд.

    • @AndreySozykin
      @AndreySozykin  2 года назад

      Пожалуйста! Рад, что нравится!

  • @aleksandrtrue3058
    @aleksandrtrue3058 3 года назад +6

    Круто! Спасибо. 12 минут чётко и по сути! Теперь могу поддержать разговор на эту тему

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

    спасибо большое! всегда приятно смотреть!

  • @genlala
    @genlala 4 года назад +7

    Спасибо! Очень просто и понятно изложен материал :)

  • @trek3456
    @trek3456 2 года назад

    Хороший вы учитель! 👍🏻

  • @tankowot
    @tankowot 5 лет назад +4

    Все понятно и просто, огромная благодарность

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

      Спасибо за приятный отзыв!

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

    Спасибо большое! Коротко и ясно :)

  • @glgl1964
    @glgl1964 3 года назад +3

    Спасибо, всё очень лаконично, понятно. На работе нужно было разобраться с Веб Сокетами и теперь хоть понятно)

  • @mikesomebody5404
    @mikesomebody5404 5 лет назад +5

    Спасибо! Ждал когда Вы освятите эту тему)

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

      Да, тема востребованная. Но освЯщением я не занимаюсь :-)

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

      @@AndreySozykin Осветите)

  • @uberkrestik6816
    @uberkrestik6816 5 лет назад +62

    Мне бы таких учителей в школе

    • @AndreySozykin
      @AndreySozykin  5 лет назад +13

      В школе такое рано проходить, это университет, первый или даже второй курс.

    • @uberkrestik6816
      @uberkrestik6816 5 лет назад +15

      @@AndreySozykin я не про материал, а подачу

    • @digital-music-artist
      @digital-music-artist Год назад

      @@AndreySozykin у нас даже в универе этого не рассказывали

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

    Красавачик, все четко объяснил)👍

  • @ivandanko5408
    @ivandanko5408 3 года назад +3

    Афигеть как все просто и понятно) спасибо)

    • @AndreySozykin
      @AndreySozykin  3 года назад

      Пожалуйста! Рад, что понравилось!

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

    Спасибо Вам большое за лекции!

  • @ascope6434
    @ascope6434 2 года назад

    Огромное спасибо за знания !!!!

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

    Быстро, просто, доступно, кайфово

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

    Огромное спасибо за видео! Все встало на свои места!

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

    Отлично рассказано. Спасибо за видео

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

    Грамотно разложено!

  • @Denis-535
    @Denis-535 5 лет назад +3

    Как всегда все отлично!

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

    Андрей, отличная подборка advanced тем по сетям! Большое спасибо! (=

  • @user-hz3nf6xh1h
    @user-hz3nf6xh1h Год назад +1

    Классная подача, все понятно и наглядно

  • @vladislavkaras491
    @vladislavkaras491 27 дней назад

    Благодарю за ролик!

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

    Спасибо большое! Материал классный и подан так же!

  • @user-qu6mb9il6w
    @user-qu6mb9il6w 3 года назад +1

    Спасибо! Сразу всё стало ясно и понятно.

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

    Супер подача. Канал в топ

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

    Спасибо. Что то невероятное !!!

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

    Сходу лайк, можно сказать вырос на вашем курсе

  • @robert33232
    @robert33232 9 месяцев назад

    Шикарно! Спасибо!

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

    Отличная подача материала

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

    Отличное видео

  • @weru0748
    @weru0748 5 лет назад +3

    супер уроки!автор мега мозг!

  • @user-yx5nj4fw2x
    @user-yx5nj4fw2x Год назад

    спасибо за контент

  • @konstantinchvilyov9602
    @konstantinchvilyov9602 3 года назад

    Огромное спасибо!

  • @Versie2007
    @Versie2007 5 лет назад +3

    Наконец-то! :)

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

      Да, долго готовился :-)

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

    Очень крутое видео. Спасибо!

  • @eugenezakharov3162
    @eugenezakharov3162 3 года назад +3

    Спасибо, очень доступно рассказано.
    Смутило что вы про текстовые заголовки 2 раза сказали для http, но это верно только для 1.1 версии
    В http 2 же бинарно всё

    • @AndreySozykin
      @AndreySozykin  3 года назад

      Да, HTTP имеется в виду первая версия.

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

    Хороший видос, с важными деталями. Спасибо за ваш труд. Рекомендую вам на стадии монтажа видео немного ускорять голос, чтобы это не слишком затягивалось.

  • @user-nv8hz7jl5s
    @user-nv8hz7jl5s Год назад

    Спасибо большое.

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

    Отлично! Спасибо!

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

    прекрасный урок

  • @user-dc9jh3hq9d
    @user-dc9jh3hq9d 4 года назад +2

    Великолепно!

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

    Все четко и по делу

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

    Кратко, чётко и понятно. Да это жестко ))

  • @user-ih8vs8xw2c
    @user-ih8vs8xw2c Год назад

    Спасибо ❤️

  • @user-ej5up4bk8o
    @user-ej5up4bk8o 5 лет назад +39

    Спасибо за информацию. Очень подробно всё рассказано. Держи лайк.
    Не освящены только 2 вопроса:
    1 - сколько веб сокетов может быть открыто на одном соединении
    2 - что произойдёт, когда количество открытых сокетов будет переполнено.

    • @hansolo5665
      @hansolo5665 4 года назад +8

      1 соединение это и есть 1 сокет. если занять все, то попытка открыть еще один закончится ошибкой

    • @user-mm5ln4qh5q
      @user-mm5ln4qh5q Год назад

      А как вопросы правильно освящать? Святой водой можно?

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

    Спасибо за информацию) очень интересно, об этом не знал)

  • @user-nv7gz2vl5g
    @user-nv7gz2vl5g 4 года назад +1

    Спасибо)

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

    *Л. а. й. к. о. с.* за видос.

  • @user-lb9rz2jg9l
    @user-lb9rz2jg9l 10 месяцев назад

    Отлично, не то что частями везде

  • @user-rz7wq5ui5l
    @user-rz7wq5ui5l 4 года назад +1

    Лайк не глядя

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

    Top! 😎👍

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

    Спасибо!

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 5 лет назад

    Спасибо

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

    Спасибо за крутые лекции! Скажите, а планируется видео про RSockets?

    • @AndreySozykin
      @AndreySozykin  3 года назад

      Пока не планировал. Но стриминговые протоколы интересная тема. Думаю, как к ней подступиться.

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

    Спасибо большое, крутое обьяснение. Не хватило информации про негативные стороны, какие ограничения есть? Иначе получается надо про http забыть и использовать его только для хендшейка

  • @user-dn4lk4ur2w
    @user-dn4lk4ur2w 3 года назад +1

    Благодарю

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

    топ , спасибо .

  • @PAIN153
    @PAIN153 2 года назад

    Очень познавательно) Честно говоря вот начиная с формата заголовка Кадра немного запутался ( даже можно сказать не понял) как

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

    А можете сделать лекцию про OAST(внеполосное соединение). Искал, но не смог найти информацию

  • @okyierrorvloneokyierrorvlo8640

    Андрей, у вас случайно нет ролика по протоколу ntp)?

  • @user-ch5iz9xm6u
    @user-ch5iz9xm6u 4 года назад +2

    Спасибо что разжевали

  • @user-wf6hh8fq1n
    @user-wf6hh8fq1n 4 года назад +1

    very good

  • @hackyou497
    @hackyou497 2 года назад

    конечно норм презентация, но можно выравнить заголовок слайда по высоте и выделить его шрифтом больше? Создается диспропорция в дизайне, плюс контент слайда слишком темный, нужно сделать шрифт сероватым

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

    Будет ли продолжение курса?

  • @alejandrospencio5524
    @alejandrospencio5524 3 года назад

    спасибО! а какие минусы ?

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

    Можно ли подделать WS соединение/кадр/сообщение? Нужно ли изобретать симуляцию сессий? Или маскирование надёжно?

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

      Подделать можно. Для защиты лучше использовать готовый протокол WSS (WebSockets over SSL/TLS).

  • @selenast7561
    @selenast7561 3 года назад

    А в чем разница с http/1.1, который тоже поддерживает, если я правильно помню, постоянное соединение?

  • @alex_donnotdisrupt_2000
    @alex_donnotdisrupt_2000 3 года назад

    Спасибище!!
    А получается если в приложение почему-то не будет реализован(неверно) close..клиент не станет его тоже отправлять? И такое соединение будет держаться вечность?) И/или пока их не откроется столько что сервер ляжет?

    • @olego5633
      @olego5633 2 года назад

      Да, если в сервере не реализована закрытие по таймауту то соединение будет крутиться в бесконечном цикле пока сервер не ляжет. Если ляжет клиент то он обязан закрыть соединение это по сути отправка пустого байтовогомассива, в этом случае сервер обязан тоже закрыть сокет на своей стороне и удалить его из памяти.

  • @user-zh4zj6dg2r
    @user-zh4zj6dg2r 4 года назад +1

    вопрос? TCP cоединение и TCP протокол. в этом случае какая разница? а тип данных TCP разве не дейтаграммы?

    • @AndreySozykin
      @AndreySozykin  4 года назад

      TCP - это название протокола. Для передачи данных TCP использует соединение, чтобы обеспечить надежность. Но в TCP есть еще много других элементов, кроме соединения - подтверждения получения данных, скользящее окно и т.п.
      Дейтаграммы используются в UDP.

  • @Denis-535
    @Denis-535 4 года назад +1

    07:45 А если сервер посылает клиенту сообщение close, то клиент тоже должен ответно отправить close?
    По-моему сервер закрывает сессию не ожидая каких-то ответных сообщений. Хотя на клиенте нужно вызвать close, чтобы состояние сокета перешло из CloseReceived в Close. Не знаю посылает ли клиент сообщение или просто меняет значение состояния.

    • @AndreySozykin
      @AndreySozykin  4 года назад +2

      Вызовы методов сокета не всегда напрямую связаны с сообщениями. Close нужен для закрытия соединения. В идеальном случае соединение нужно закрывать с двух сторон.
      Но TCP позволяет закрыть соединение с одной стороны, а с другой оставить открытым. Поэтому клиент не обязан вызывать close. Но лучше это сделать.

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

    Андрей, объясните, пожалуйста, а как это все проходит через NAT? Как маршрутизатор понимает какому клиенту в сети предназначен входящий запрос от сервера? При ответе сервера, понятно, есть запить в таблице NAT, когда клиент запрашивал что-то у сервера, а вот когда клиент ничего не запрашивал, как сервер может передать что-то клиенту и как маршрутизатор поймет какому?
    И еще получается, что при использовании WS браузер готов принимать запросы от сервера? А при использовании HTTP браузер готов принимать только ответы сервера на отправленные запросы, так?

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

      В любом случае сначала клиент должен установить соединение. Сервер по своей инициативе первый ничего не отправляет. Когда соединение установлено, то запись о нем живет в таблице NAT некоторое время. Поэтому когда сервер отправляет данные клиенту по своей инициативе после установки соединения, то устройство NAT найдёт соответствующую запись в таблице и поймёт, что делать.

  • @greezlock7291
    @greezlock7291 5 лет назад +3

    Почему бы заместо WS не использовать возможности "keep alive" в http?

    • @AndreySozykin
      @AndreySozykin  5 лет назад +2

      Потому что в HTTP сервер не может отправить ничего клиенту по своей инициативе, а в WS может. Это ключевое отличие.

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

      @@AndreySozykin Я согласен со случаем, когда нету постоянного соединения (i.e. keep-alive).
      Но если оно есть, что будет мешать в последующем серверу отправлять сообщения первым?

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

      @@greezlock7291 думаю, что клиент попросту не будет ожидать, что сервер первым напишет сообщение, поэтому и не обработает его.

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

    Можно где-то скачать презентации к лекциям?

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

      Презентация выкладываю на сайт, но сейчас он в процессе переезда и не успел выложить все презентации. По Web-сокетам презентацию выложил. Ссылка на страницу курса - www.asozykin.ru/courses/networks_online

    • @victoriacannonball83
      @victoriacannonball83 4 года назад

      @@AndreySozykinСпасибо!

  • @nigan952
    @nigan952 2 года назад

    Зачем нужны WebSocet кадры, когда есть TCP фрагменты?

  • @MrEmityushkin
    @MrEmityushkin 2 года назад

    +Plus

  • @Denis-535
    @Denis-535 5 лет назад +3

    А что происходит, когда сервер шлет сообщение, а клиент в это время подключен, но не принимает сообщения?

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

      Сообщение потеряется. Если нужна гарантия доставки, то её нужно реализовывать самостоятельно. Например, клиент должен подтверждать получение сообщений, как в TCP.

    • @Denis-535
      @Denis-535 5 лет назад

      ​@@AndreySozykin забыл дописать, что клиент не принимает лишь в течение нескольких секунд. Допустим обрабатывает старые сообщения или как в моем случае шлет http запросы.

    • @Denis-535
      @Denis-535 5 лет назад

      @@AndreySozykin Похоже, что сервер буферизирует сообщения. А когда клиент начинает принимать сообщения, то сервер шлет весь буфер.

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

    HTTP2 может же отправлять данные по своей воле

    • @AndreySozykin
      @AndreySozykin  3 года назад

      Да, в HTTP2 такую возможность добавили.

  • @user-rk7zn5kh4q
    @user-rk7zn5kh4q 2 года назад

    Отлично! Но до 0:47 сек я думал что он вообще не по-русски говорит)))

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

    WebSocket должен хостинг поддерживать или как? я не могу понять

    • @4Aziwzjdfgnk29y
      @4Aziwzjdfgnk29y 4 года назад

      все понял...

    • @AndreySozykin
      @AndreySozykin  4 года назад

      Web-сервер должен поддерживать.

    • @4Aziwzjdfgnk29y
      @4Aziwzjdfgnk29y 4 года назад

      Andrey Sozykin и что бы настроить демона нужно на хосте ssh подключение

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

    +

  • @user-jp5hf1mo1e
    @user-jp5hf1mo1e Год назад

    Web-сокет получается над HTTP, на не на одном уровне

  • @user-qd8dj4oy2s
    @user-qd8dj4oy2s 4 года назад

    3:23 Вы говорите URL, а написано URI, ошибка?

    • @troollface4357
      @troollface4357 4 года назад

      Написано URL, просто l маленькая

  • @user-tx3mt1zi2d
    @user-tx3mt1zi2d Год назад

    Привет андрей

  • @user-jp5hf1mo1e
    @user-jp5hf1mo1e Год назад

    т.е. просто АЯКС переименовали в ВЕБ-сокет

  • @_..X.._
    @_..X.._ Год назад

    зачем websocket?
    дана мотивация "почему не http", что очень странно, т.к. он тут вообще не при чём.
    потом построен TCP-2 поверх TCP ... "чтобы инфраструктура с LB".
    что конкретно не так (полный список), если я просто использую TCP (КАК И ПОЛОЖЕНО!). ответа не дано.

    • @_..X.._
      @_..X.._ Год назад

      т.е. у материала нет фундамента. зачем этот протокол?
      подачада нужна от проблемы, постановки задачи. что-то не выходит, как её решить.
      учтите что все LB и прочее в облаке строю я под своё приложение

  • @mikesomebody5404
    @mikesomebody5404 5 лет назад +4

    А я думал, что вебсокеты используют на траснпортном уровне sctp.

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

      Нет, web сокеты - это протокол прикладного уровня.

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

    Зачем тогда нужен http, если сокеты работают эффективнее?

    • @AndreySozykin
      @AndreySozykin  5 лет назад +2

      Web cокеты эффективнее только для приложений реального времени. Для большинства ситуаций HTTP вполне достаточно. Еще в HTTP есть кэш, который существенно повышает производительность, если данные меняются не часто.

    • @m_zhukov98
      @m_zhukov98 5 лет назад +2

      @@AndreySozykin Получается чат в контакте , телеграмме фейсбуке и тд работает на сокетах, а https применяется, чтобы достать саму страницу с сервера?

    • @AndreySozykin
      @AndreySozykin  5 лет назад +4

      Идея такая, но на практике не совсем так. Для онлайн приложений еще может использоваться AJAX, HTTP Long Polling и другие подобные технологии. Не всем нравятся web сокеты, некоторые не могут перенести унаследованный код на web сокеты и есть много других причин.

    • @xenonist4502
      @xenonist4502 5 лет назад +2

      Как минимум потому что сокеты появились много позже http)))

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

      @@AndreySozykin А Long Polling разве не на веб-сокетах реализован?

  • @kostya1306
    @kostya1306 2 года назад

    Тема сисек не раскрыта. Осталось много вопросов, например: Если я хочу организовать сокетное соединение не на собственном сервере, а на арендованном (виртуальном может быть). Как провайдер к этому отнесется? Какие ресурсы у него задействуются? Сколько соединений он сможет одновременно держать (ограниченное количество, очень большое, или бесконечное)? Сколько по времени модет жить соединение, есть ли тайаут, после которого провайдер может принудительно закрыть соединение? Если у клиента пропала всязь, соединение само будет пытаться восстановиться или закроется?

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

    видео отличное, все объяснил очень хорошо, но подстригись нормально плиз, мне приходится твое лицо диспетчером задач закрывать

    • @AndreySozykin
      @AndreySozykin  2 года назад

      Прическу регулярно меняю 😉

    • @serhiinikitin1679
      @serhiinikitin1679 2 года назад

      @@AndreySozykin братик, ты ж айтишник, сходи в номальный барбершоп, денег должно хватить

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

    Мозг

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

    Спасибо!

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

    Спасибо

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

    Спасибо