Websocket ASP .NET Core

Dzięki websocketom dane na twojej stronie mogę być wymienianiane w czasie rzeczywistym bez potrzeby przeładowania strony. Popularnym przypadkiem użycia są czaty z poziomu przeglądarki.

Gdyby korzystać z frameworka ASP.NET w wersji 4 to do wymiany danych w czasie rzeczywistym można wykorzystać SignalR framework. Niestety nie ma jeszcze stabilnego wydania tego narzędzia dla dotnet core.

SignalR to “kombajn”, który potrafi sobie poradzić nawet w przypadku, gdy nasza przeglądarka nie obsługuje WebSocketów, możesz o tym poczytaj tutaj;

Prace nad SignalR dla core trwają ale Microsoft wydał paczkę WebSockets, która pozwala uruchomić serwer WebSocketowy.

Czego nauczysz się z tego wpisu?

W tym wpisie pokażę Ci jak uruchomić i skonfigurować własny serwer websocketów w projekcie ASP .NET Core.

Paczka z nuget

Moim punktem wejściowym jest nowy projekt ASP NET Core Mvc.

Dodaj paczkę z nugeta: Microsoft.AspNetCore.WebSockets

Konfiguracja middleware

Dodaj WebSocket middleware w metodzie Configure w pliku Startup.cs

Obsłużenie zapytań WebSocket

Stwórz metodę Echo w HomeController

Odebieranie i wysyłanie wiadomości

HttpContext.WebSockets.AcceptWebSocketAsync() jest tu najważniejsze. To te wywołanie zmiania połączenie TCP na WebSocketowe, więc w konsekwencji ta akcja obsłuży punkt dostępowy do WebSocketa a nie zapytanie http. Wywołanie te zwraca objekt WebSocket.

Testowanie

Do testowanie użyłem bardzo prostego skryptu w Pythonie.

Zainstalowałem paczkę websocket-client

A następnie skopiowałem przykład z repozytorium i podmieniłem url.

Test wyszedł pozytywanie, mój prosty websocketowy serwer działa.

websockets-terminal

Podsumowanie

Jak już pewnie zauważyłeś metoda Echo nie wygląda zbyt przyjaźnie. Poszukałem chwilę i udało mi się znaleźć bardzo interesujące rozwiązanie na GitHubie – WebSocket Manager. Tutaj znajdziesz instrukcję jak z niego skorzystać – Real Time ASP .NET Core

Kompletny przykład znajdziesz tutaj
Obrazek posta na darmowej licencji z FreePik