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

  Рет қаралды 10,458

Sergei Calabonga

Sergei Calabonga

Күн бұрын

В этом видео я покажу вариант реализации чата (real-time) на SignalR с возможностью подключения клиентов с разных платформ. Исходные файлы чата вы можете найти на github.com.
Ссылки:
dotnet.microso...
docs.microsoft...
www.calabonga....
github.com/Cal...
github.com/Cal...
Благодарности и помощь каналу принимаются:
www.calabonga....

Пікірлер: 29
@DInfinity3
@DInfinity3 2 жыл бұрын
Большое спасибо за видео. А как организовать пересылку сообщения от одного конкретного пользователя к другому конкретному пользователю?
@SergeiCalabonga
@SergeiCalabonga 2 жыл бұрын
У каждого прдключения есть ConnectionId. Смотреть надо в эту сторону. 🙂
@JuiKoloshi
@JuiKoloshi 2 жыл бұрын
А как реализовать javascript клиента signalR? Есть ли какая то библиотека?
@SergeiCalabonga
@SergeiCalabonga 2 жыл бұрын
Не задавался таким вопросом, если честно. Просто использую SingalR и всё.
@rustc2p256
@rustc2p256 3 жыл бұрын
Отличное видео
@SergeiCalabonga
@SergeiCalabonga 3 жыл бұрын
И это только начало!
@Happy-vl7ol
@Happy-vl7ol 3 жыл бұрын
Ничего себе, так изменился. Лайк
@SergeiCalabonga
@SergeiCalabonga 3 жыл бұрын
Кто изменился? Что изменилось?
@Happy-vl7ol
@Happy-vl7ol 3 жыл бұрын
@@SergeiCalabonga ну качество подачи изменилось в лучшую сторону!
@Happy-vl7ol
@Happy-vl7ol 3 жыл бұрын
​@@SergeiCalabonga вообще спасибо за такие видео, благодаря им я выучил Blazor
@SergeiCalabonga
@SergeiCalabonga 3 жыл бұрын
Ну, что ж... Растем над собой!!!
@SergeiCalabonga
@SergeiCalabonga 3 жыл бұрын
@@Happy-vl7ol Ну, выучил - это наверное сильно сказано! Наверное правильнее сказать "познакомился"
@AlexandrSkarbo
@AlexandrSkarbo 2 жыл бұрын
Это извращение появилось из-за недостатков стека протоколов http/1.1 уже давно есть 2.0 и 3й будет (ru.wikipedia.org/wiki/HTTP/3). Этот урок интересен в историческом контексте, но для практического применения он уже устарел. Если разрабатывается стек микросервисов на перспективу и выход релиза приложения ожидается в течении года и позже, это может быть связано со многими факторами, то лучше думать на перспективу и использовать 3ю версию, тем более все его поддерживают
@SergeiCalabonga
@SergeiCalabonga 2 жыл бұрын
Если честно, то вообще не понял о чем комментарий. Так можно сказать про любую технологию или протокол.
@СергейТарамалы-ш8г
@СергейТарамалы-ш8г 2 жыл бұрын
У меня возник вопрос насчет системы definitions, как я понимаю в данной системе мы в каждом definition определяем нужные нам services и middlewares, с сервисами проблем нет, так как там не важен порядок подключения, но в middleware он важен и при этом не понятно в каком порядке по итогу склеиваются middlewares из всех definitions?
@СергейТарамалы-ш8г
@СергейТарамалы-ш8г 2 жыл бұрын
я просто использую ваш новый шаблон, где реализованы definitions и создал отдельно SignalRDefinition и там добавил app.UseSignalR ... и приложение крашится в связи с тем что нарушена последовательность middleware, я перенес app.UseSignalR в IdentityDefinition и заработало, но это явно не то что было задумано вами)
@SergeiCalabonga
@SergeiCalabonga 2 жыл бұрын
Те definitions, которые имеют значение последовательность я обычно в одном definition делаю. Или вы можете доработать систему и добавить возможность сортировки definitions.
@СергейТарамалы-ш8г
@СергейТарамалы-ш8г 2 жыл бұрын
@@SergeiCalabonga Понял, спасибо большое за ответ
@SergeiCalabonga
@SergeiCalabonga 2 жыл бұрын
@@СергейТарамалы-ш8г welcome
@alextret6787
@alextret6787 Жыл бұрын
круто, спасибо за видео
@SergeiCalabonga
@SergeiCalabonga Жыл бұрын
Спасибо за комментарий
@beloved_guy
@beloved_guy Жыл бұрын
Большое спасибо, видео пригодилось. Почерпнул для себя что-то полезное! Однако, не могу не отметить, что подача очень непростая. Приходилось пересматривать фрагменты и осмыслять/переосмыслять. Не знаю, какая предполагалась целевая аудитория для этого видео, но мне, как обладателю очень скромных знаний SignalR и не претендующему на звание самого умного, было очень сложно успевать за мыслью. "Это объясню потом", "Это опустим...", "Здесь сделаю немножко за кадром", "Сорри, за кадром часть пришлось переделать" и так далее. В общем, каждая подобная фраза добавляла мне одну каплю пота на лбу. Все таки, если видео позиционируется, как лекция, хотелось бы более четкого схождения от общего к частному и более последовательной разработки
@SergeiCalabonga
@SergeiCalabonga Жыл бұрын
1. Есть исходники 2. Я не лектор 3. Спасибо за подробный комментарий 4. 👍
@beloved_guy
@beloved_guy Жыл бұрын
@@SergeiCalabonga понял, тогда вопросов нет. Видео, в любом случае считаю полезным. p.s. терпеть не могу чужие исходники))
@semen083
@semen083 3 жыл бұрын
Классное видео, интересно следующее: 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 3 жыл бұрын
Классное видео, интересно следующее: 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
SignalR Chat: Клиент чата на WPF
17:09
Sergei Calabonga
Рет қаралды 2,8 М.
How To Get Married:   #short
00:22
Jin and Hattie
Рет қаралды 24 МЛН
pumpkins #shorts
00:39
Mr DegrEE
Рет қаралды 50 МЛН
On .NET Live -  Building a Game with .NET and Orleans
1:01:50
CI/CD - Простым языком на понятном примере
15:29
Артём Шумейко
Рет қаралды 47 М.
Blazor Authentication 1: Основы
52:08
Sergei Calabonga
Рет қаралды 11 М.
.NET 6 Blazor 🔥 Chat with SignalR using WebSockets
48:02
Patrick God
Рет қаралды 35 М.
Сокетный Клиент-Сервер на C#
58:16
Евгений Волосатов
Рет қаралды 36 М.
How To Get Married:   #short
00:22
Jin and Hattie
Рет қаралды 24 МЛН