WebSocket библиотеки C# (.NET): SignalR, Fleck и WebSocketSharp
WebSocket — это протокол полнодуплексной связи поверх TCP, позволяющий серверу и клиенту обмениваться данными в реальном времени без постоянных HTTP-запросов. В экосистеме C# (.NET) существует несколько библиотек, которые упрощают интеграцию WebSocket. В этой статье мы рассмотрим три наиболее популярных решения: SignalR (официальная библиотека Microsoft), Fleck (лёгкий сервер) и WebSocketSharp (универсальный клиент-сервер).
1. SignalR — официальный инструмент от Microsoft
SignalR — это высокоуровневая библиотека для ASP.NET Core, которая автоматически выбирает лучший транспорт (WebSocket, Server-Sent Events, Long Polling) в зависимости от возможностей клиента. Она идеально подходит для создания чатов, дашбордов и игр.
Основные возможности:
- Автоматическое переключение между транспортами.
- Группы и широковещательные рассылки.
- Поддержка масштабирования (Redis, Azure SignalR Service).
- Интеграция с клиентами на JavaScript, .NET, Java.
Пример серверного хаба на C#:
using Microsoft.AspNetCore.SignalR;
public class ChatHub : Hub
{
public async Task SendMessage(string user, string message)
{
// Рассылаем сообщение всем подключённым клиентам
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
public override async Task OnConnectedAsync()
{
await Clients.Caller.SendAsync("Notify", "Вы подключились к чату");
await base.OnConnectedAsync();
}
}
Пример клиента на C# (Console):
using Microsoft.AspNetCore.SignalR.Client;
var connection = new HubConnectionBuilder()
.WithUrl("https://yourserver.com/chathub")
.Build();
connection.On<string, string>("ReceiveMessage", (user, message) =>
{
Console.WriteLine($"{user}: {message}");
});
await connection.StartAsync();
await connection.InvokeAsync("SendMessage", "User1", "Привет!");
2. Fleck — минималистичный WebSocket сервер
Fleck — это лёгкая библиотека для создания WebSocket серверов без зависимостей от ASP.NET. Она идеально подходит для простых приложений, где не нужны сложные абстракции SignalR.
Особенности:
- Работает на чистом TCP (без HTTP).
- Поддерживает SSL (WSS).
- Нет встроенного масштабирования — только один процесс.
Пример сервера на Fleck:
using Fleck;
var server = new WebSocketServer("ws://0.0.0.0:8181");
var connections = new List<IWebSocketConnection>();
server.Start(socket =>
{
socket.OnOpen = () =>
{
Console.WriteLine("Клиент подключён");
connections.Add(socket);
};
socket.OnClose = () =>
{
Console.WriteLine("Клиент отключён");
connections.Remove(socket);
};
socket.OnMessage = message =>
{
// Отправляем сообщение всем
foreach (var client in connections)
{
client.Send($"Эхо: {message}");
}
};
});
Console.WriteLine("Сервер запущен на ws://localhost:8181");
Console.ReadLine();
3. WebSocketSharp — универсальный клиент и сервер
WebSocketSharp — это библиотека с открытым исходным кодом, которая предоставляет как клиентский, так и серверный WebSocket. Она не зависит от ASP.NET и работает на .NET Framework и .NET Core.
Ключевые возможности:
- Поддержка SSL/TLS и прокси.
- Событийная модель (OnOpen, OnClose, OnMessage, OnError).
- Отправка бинарных данных (byte[]).
Пример клиента на WebSocketSharp:
using WebSocketSharp;
using (var ws = new WebSocket("wss://echo.websocket.org"))
{
ws.OnMessage += (sender, e) =>
{
Console.WriteLine($"Получено: {e.Data}");
};
ws.Connect();
ws.Send("Привет, WebSocket!");
Console.ReadLine();
}
Пример сервера на WebSocketSharp:
using WebSocketSharp.Server;
public class EchoService : WebSocketBehavior
{
protected override void OnMessage(MessageEventArgs e)
{
Send($"Эхо: {e.Data}");
}
}
var server = new WebSocketServer("ws://localhost:8080");
server.AddWebSocketService<EchoService>("/echo");
server.Start();
Console.WriteLine("Сервер запущен. Нажмите Enter для остановки.");
Console.ReadLine();
server.Stop();
Сравнение библиотек
Также в библиотекеРекомендаций |
|---|