SignalR Chat: Сервер и его клиенты

В этом видео я покажу вариант реализации чата (real-time) на SignalR с возможностью подключения клиентов с разных платформ. Исходные файлы чата вы можете найти на github.com.
Ссылки:
dotnet.microsoft.com/apps/asp...
docs.microsoft.com/ru-ru/aspn...
www.calabonga.net/blog/post/i...
github.com/Calabonga/Microser...
github.com/Calabonga/SignalRChat
Благодарности и помощь каналу принимаются:
www.calabonga.net/site/thanks

Пікірлер: 29

  • @rustc2p256
    @rustc2p2562 жыл бұрын

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

  • @SergeiCalabonga

    @SergeiCalabonga

    2 жыл бұрын

    И это только начало!

  • @alextret6787
    @alextret6787 Жыл бұрын

    круто, спасибо за видео

  • @SergeiCalabonga

    @SergeiCalabonga

    Жыл бұрын

    Спасибо за комментарий

  • @Happy-vl7ol
    @Happy-vl7ol2 жыл бұрын

    Ничего себе, так изменился. Лайк

  • @SergeiCalabonga

    @SergeiCalabonga

    2 жыл бұрын

    Кто изменился? Что изменилось?

  • @Happy-vl7ol

    @Happy-vl7ol

    2 жыл бұрын

    @@SergeiCalabonga ну качество подачи изменилось в лучшую сторону!

  • @Happy-vl7ol

    @Happy-vl7ol

    2 жыл бұрын

    ​@@SergeiCalabonga вообще спасибо за такие видео, благодаря им я выучил Blazor

  • @SergeiCalabonga

    @SergeiCalabonga

    2 жыл бұрын

    Ну, что ж... Растем над собой!!!

  • @SergeiCalabonga

    @SergeiCalabonga

    2 жыл бұрын

    @@Happy-vl7ol Ну, выучил - это наверное сильно сказано! Наверное правильнее сказать "познакомился"

  • @DInfinity3
    @DInfinity32 жыл бұрын

    Большое спасибо за видео. А как организовать пересылку сообщения от одного конкретного пользователя к другому конкретному пользователю?

  • @SergeiCalabonga

    @SergeiCalabonga

    2 жыл бұрын

    У каждого прдключения есть ConnectionId. Смотреть надо в эту сторону. 🙂

  • @user-kl3kk7xg5b
    @user-kl3kk7xg5b2 жыл бұрын

    У меня возник вопрос насчет системы definitions, как я понимаю в данной системе мы в каждом definition определяем нужные нам services и middlewares, с сервисами проблем нет, так как там не важен порядок подключения, но в middleware он важен и при этом не понятно в каком порядке по итогу склеиваются middlewares из всех definitions?

  • @user-kl3kk7xg5b

    @user-kl3kk7xg5b

    2 жыл бұрын

    я просто использую ваш новый шаблон, где реализованы definitions и создал отдельно SignalRDefinition и там добавил app.UseSignalR ... и приложение крашится в связи с тем что нарушена последовательность middleware, я перенес app.UseSignalR в IdentityDefinition и заработало, но это явно не то что было задумано вами)

  • @SergeiCalabonga

    @SergeiCalabonga

    2 жыл бұрын

    Те definitions, которые имеют значение последовательность я обычно в одном definition делаю. Или вы можете доработать систему и добавить возможность сортировки definitions.

  • @user-kl3kk7xg5b

    @user-kl3kk7xg5b

    2 жыл бұрын

    @@SergeiCalabonga Понял, спасибо большое за ответ

  • @SergeiCalabonga

    @SergeiCalabonga

    2 жыл бұрын

    @@user-kl3kk7xg5b welcome

  • @JuiKoloshi
    @JuiKoloshi Жыл бұрын

    А как реализовать javascript клиента signalR? Есть ли какая то библиотека?

  • @SergeiCalabonga

    @SergeiCalabonga

    Жыл бұрын

    Не задавался таким вопросом, если честно. Просто использую SingalR и всё.

  • @beloved_guy
    @beloved_guy Жыл бұрын

    Большое спасибо, видео пригодилось. Почерпнул для себя что-то полезное! Однако, не могу не отметить, что подача очень непростая. Приходилось пересматривать фрагменты и осмыслять/переосмыслять. Не знаю, какая предполагалась целевая аудитория для этого видео, но мне, как обладателю очень скромных знаний SignalR и не претендующему на звание самого умного, было очень сложно успевать за мыслью. "Это объясню потом", "Это опустим...", "Здесь сделаю немножко за кадром", "Сорри, за кадром часть пришлось переделать" и так далее. В общем, каждая подобная фраза добавляла мне одну каплю пота на лбу. Все таки, если видео позиционируется, как лекция, хотелось бы более четкого схождения от общего к частному и более последовательной разработки

  • @SergeiCalabonga

    @SergeiCalabonga

    Жыл бұрын

    1. Есть исходники 2. Я не лектор 3. Спасибо за подробный комментарий 4. 👍

  • @beloved_guy

    @beloved_guy

    Жыл бұрын

    @@SergeiCalabonga понял, тогда вопросов нет. Видео, в любом случае считаю полезным. p.s. терпеть не могу чужие исходники))

  • @semen083
    @semen0832 жыл бұрын

    Классное видео, интересно следующее: 1) Можно ли тоже самое реализовать с помощью HTTP2- ведь он имеет схожий API взаимодействия с WebSockets- дуплексная связь, обмен в бинарном виде и тд. Самостоятельно к сожалению не нашел способа в C# как можно залезть поглубже в конвейр HTTP2. 2)41:22 Почему "connection.StartAsync().GetAwaiter().GetResult();" вместо простого "await connection.StartAsync();"? 3)На консольном клиенте отсутствует логика обработки дисконнекта-это просто для упрощения или если клиент подсоединился, то кроме как принудительного отсоединения от сервера или по собственному желанию он не может отвалится (.WithAutomaticReconnect() все порешает) (например клиент не активен и он отваливается по таймауту)? 4)Покажите плиз как правильно хранить secrets для продуктивного развертывания (в случае видео password для клиента или строка подключения) 5)Будет ли Singleton ChatManager'ру плохо от того, если будет очень много с ним операций(например одновременно очень много тысяч пользователей добавляются и удаляются, шлют другу другу мемасы через него и тд)- каким образом можно передизайнить ChatManager, чтобы он мог работать с большим объемом операций? 6)Позволит ли замена DateTime на DateTimeOffset использовать приложение глобально-то есть перестать зависеть от региональных настроек сдвига часового пояса? 7)Нормально ли делать для IdentityServer форму авторизации не из MVC, а на полном JavaScript (например сделать SPA приложение Vue и захостить его на нем) 8)Есть ли какие-либо методы компрессии сообщений SignalR (типа gzip или brotli для http запросов)? 9)Это у Вас Half-Life в нижней панели задач около ридера от JetBrains? Спасибо

  • @SergeiCalabonga

    @SergeiCalabonga

    2 жыл бұрын

    Классное видео, интересно следующее: 1) Можно ли тоже самое реализовать с помощью HTTP2- ведь он имеет схожий API взаимодействия с WebSockets- дуплексная связь, обмен в бинарном виде и тд. Самостоятельно к сожалению не нашел способа в C# как можно залезть поглубже в конвейр HTTP2. 2)41:22 Почему "connection.StartAsync().GetAwaiter().GetResult();" вместо простого "await connection.StartAsync();"? 3)На консольном клиенте отсутствует логика обработки дисконнекта-это просто для упрощения или если клиент подсоединился, то кроме как принудительного отсоединения от сервера или по собственному желанию он не может отвалится (.WithAutomaticReconnect() все порешает) (например клиент не активен и он отваливается по таймауту)? 4)Покажите плиз как правильно хранить secrets для продуктивного развертывания (в случае видео password для клиента или строка подключения) 5)Будет ли Singleton ChatManager'ру плохо от того, если будет очень много с ним операций(например одновременно очень много тысяч пользователей добавляются и удаляются, шлют другу другу мемасы через него и тд)- каким образом можно передизайнить ChatManager, чтобы он мог работать с большим объемом операций? 6)Позволит ли замена DateTime на DateTimeOffset использовать приложение глобально-то есть перестать зависеть от региональных настроек сдвига часового пояса? 7)Нормально ли делать для IdentityServer форму авторизации не из MVC, а на полном JavaScript (например сделать SPA приложение Vue и захостить его на нем) 8)Есть ли какие-либо методы компрессии сообщений SignalR (типа gzip или brotli для http запросов)? 9)Это у Вас Half-Life в нижней панели задач около ридера от JetBrains? Спасибо 1) Коллеги просили SignalR. 2) Потому что одно и тоже действие можно выполнить разными способами: и "старыми добрыми" и "модными красивыми". 3) Для демонстрации простого примера работы данный функционал не предусмотрен. В одно видео нельзя впихнуть невпихуемое. 4) Это тема для другого видео. 5) В данном видео Singleton взят для того, чтобы показать что данные должны сохраняться (в памяти, в базе, в текстовом файле), а где уже не важно. 6) В NET 6 появятся "полезности" для хранение времени и дат. Всё упроститься. Но можно и по олдскульному, как вы или как использовал я. 7) На вкус и цвет все фломастеры разные. Кто как хочет...Хоть на Blazor! 8) Никогда не было такой потребности, ибо предназначение SignalR в другом, для больших объемов передаваемых данных можно и получше найти решение. 9) LinqPad.net

  • @AlexandrSkarbo
    @AlexandrSkarbo2 жыл бұрын

    Это извращение появилось из-за недостатков стека протоколов http/1.1 уже давно есть 2.0 и 3й будет (ru.wikipedia.org/wiki/HTTP/3). Этот урок интересен в историческом контексте, но для практического применения он уже устарел. Если разрабатывается стек микросервисов на перспективу и выход релиза приложения ожидается в течении года и позже, это может быть связано со многими факторами, то лучше думать на перспективу и использовать 3ю версию, тем более все его поддерживают

  • @SergeiCalabonga

    @SergeiCalabonga

    2 жыл бұрын

    Если честно, то вообще не понял о чем комментарий. Так можно сказать про любую технологию или протокол.