Implementajca WebSocketów
WebSocket to technologia pozwalająca na dwukierunkową komunikację pomiędzy przeglądarką internetową a serwerem, która umożliwia niskopoziomowe przesyłanie danych w czasie rzeczywistym. W przypadku ASP.NET Core, WebSockety można zaimplementować w celu umożliwienia komunikacji pomiędzy przeglądarką a serwerem za pomocą protokołu WebSocket.
Podstawowe kroki, aby zaimplementować WebSockety w ASP.NET Core:
1. Dodaj obsługę w pliku Startup.cs poprzez wywołanie metody UseWebSockets() na obiekcie IApplicationBuilder.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseWebSockets();
// ...
}
2. Dodaj obsługę WebSocket w kontrolerze. W tym celu utwórz akcję, która będzie obsługiwać połączenia WebSocket i skorzystaj z metody HttpContext.WebSockets.AcceptAsync() do zaakceptowania połączenia.
[HttpGet("/ws")]
public async Task WebSocketHandler()
{
var webSocket = await HttpContext.WebSockets.AcceptAsync();
// Obsługa połączenia WebSocket.
}
3. W ramach obsługi połączenia WebSocket możesz korzystać z różnych metod WebSocket, takich jak ReceiveAsync(), SendAsync() czy CloseAsync(), aby przesyłać dane pomiędzy klientem a serwerem.
[HttpGet("/ws")]
public async Task WebSocketHandler()
{
var webSocket = await HttpContext.WebSockets.AcceptAsync();
while (webSocket.State == WebSocketState.Open)
{
var buffer = new ArraySegment<byte>(new byte[1024]);
var result = await webSocket.ReceiveAsync(buffer, CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Text)
{
var message = Encoding.UTF8.GetString(buffer.Array, buffer.Offset, result.Count);
var responseMessage = $"You sent {result.Count} bytes: {message}";
var responseBuffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(responseMessage));
await webSocket.SendAsync(responseBuffer, WebSocketMessageType.Text, true, CancellationToken.None);
}
else if (result.MessageType == WebSocketMessageType.Close)
{
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
}
}
}
4. Możesz również użyć middleware'ów WebSocket, takich jak MapWebSocketManager<T>(), który pozwala na prostą obsługę wielu połączeń WebSocket za pomocą jednego menedżera.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseWebSockets();
app.MapWebSocketManager<MyWebSocketHandler>("/ws");
// ...
}
public class MyWebSocketHandler : WebSocketHandler
{
public MyWebSocketHandler(WebSocketManager webSocketManager) : base(webSocketManager)
{
}
public override async Task OnConnectedAsync(WebSocket socket)
{
await base.OnConnectedAsync(socket);
// Obsługa nowego połączenia WebSocket.
}
public override async Task ReceiveAsync(WebSocket socket, WebSocketReceiveResult result, byte[] buffer)
{
// Obsługa otrzymanej wiadomości.
}
}
Oprócz powyższych kroków, warto pamiętać, żeby korzystać z CancellationToken, aby w odpowiedni sposób obsłużyć przerwanie połączenia oraz zaimplementować obsługę błędów.
Dzięki implementacji WebSocketów w ASP.NET Core, aplikacja jest w stanie obsługiwać interaktywną i natychmiastową komunikację z klientem, co może być szczególnie przydatne w aplikacjach wymagających ciągłego przesyłania danych w czasie rzeczywistym, takich jak czaty, gry online czy transmisje wideo na żywo.