π WebSockets in .NET Core
Real-time is essential. WebSockets in .NET Core enable bidirectional communication.
π WebSocket Setup
// Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseWebSockets();
app.Map("/ws", async context =>
{
if (context.WebSockets.IsWebSocketRequest)
{
using var webSocket = await context.WebSockets.AcceptWebSocketAsync();
await HandleWebSocket(webSocket);
}
else
{
context.Response.StatusCode = 400;
}
});
async Task HandleWebSocket(WebSocket webSocket)
{
var buffer = new byte[1024 * 4];
var result = await webSocket.ReceiveAsync(buffer, CancellationToken.None);
while (!result.CloseStatus.HasValue)
{
var message = Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine($"Received: {message}");
var response = $"Echo: {message}";
var responseBytes = Encoding.UTF8.GetBytes(response);
await webSocket.SendAsync(
responseBytes,
result.MessageType,
result.EndOfMessage,
CancellationToken.None);
result = await webSocket.ReceiveAsync(buffer, CancellationToken.None);
}
await webSocket.CloseAsync(
result.CloseStatus.Value,
result.CloseStatusDescription,
CancellationToken.None);
}
app.Run();
π― Advanced WebSockets
// WebSocket middleware
app.Use(async (context, next) =>
{
if (context.Request.Path == "/ws")
{
if (context.WebSockets.IsWebSocketRequest)
{
using var webSocket = await context.WebSockets.AcceptWebSocketAsync();
await HandleWebSocket(webSocket);
}
else
{
context.Response.StatusCode = 400;
}
}
else
{
await next();
}
});
// WebSocket manager
public class WebSocketManager
{
private static readonly List _sockets = new();
public static async Task Add(WebSocket socket)
{
_sockets.Add(socket);
}
public static async Task Broadcast(string message)
{
var bytes = Encoding.UTF8.GetBytes(message);
foreach (var socket in _sockets)
{
if (socket.State == WebSocketState.Open)
{
await socket.SendAsync(
bytes,
WebSocketMessageType.Text,
true,
CancellationToken.None);
}
}
}
}
// JavaScript client
const socket = new WebSocket('ws://localhost:5000/ws');
socket.onopen = function() {
console.log('Connected');
socket.send('Hello from client');
};
socket.onmessage = function(event) {
console.log('Server:', event.data);
};
π‘ WebSocket Tips
- Use for real-time communication
- Handle connection lifecycle
- Broadcast to multiple clients
- Handle errors gracefully
- Consider SignalR for complex scenarios
“WebSockets in .NET Core enable real-time. Bidirectional communication. Essential for modern apps.”
