針對 .NET 環境主流 WebSocket 庫進行橫向評測,涵蓋易用性、功能豐度、相依性、部署需求、效能表現,協助專案選型。
| 庫 | 易用性 | 功能豐度 | 相依性 | 備援機制 | 部署需求 | 推薦場景 |
|---|---|---|---|---|---|---|
| Fleck | ⭐⭐⭐⭐⭐ | ⭐⭐ | 無 | 無 | 任意 .NET 應用 | 簡單專案、快速原型 |
| SignalR | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ASP.NET 執行階段 | 自動 (WebSocket → SSE → Long Polling) | IIS 8 / Win Server 2012+ | 企業級、需擴展性、混合客戶端 |
| AlchemyWebSocket | ⭐⭐⭐⭐ | ⭐⭐⭐ | 少 | 無 | Console/WinService/ASP.NET | 中型專案、需客戶端庫 |
| XSockets | ⭐⭐ | ⭐⭐⭐⭐ | 中 | 有 | 複雜 | 不推薦 (文件過時、難上手) |
| SuperWebSocket | ⭐⭐⭐ | ⭐⭐⭐⭐ | 有 (SuperSocket) | 無 | WinService 最佳 | 複雜專案、高配置彈性、長期維護 |
var server = new WebSocketServer("ws://localhost:8181");
server.Start(socket =>
{
socket.OnOpen = () => Console.WriteLine("Connected");
socket.OnClose = () => Console.WriteLine("Disconnected");
socket.OnMessage = msg => socket.Send("Echo: " + msg);
});
// Server Hub
public class ChatHub : Hub
{
public void Send(string name, string message)
=> Clients.All.broadcastMessage(name, message);
}
// Client JS
var chat = $.connection.chatHub;
chat.client.broadcastMessage = (name, msg) => { ... };
$.connection.hub.start().done(() => { ... });
var server = new WebSocketServer(81, IPAddress.Any)
{
OnReceive = (ctx) => { ... },
OnSend = (ctx) => { ... },
OnConnect = (ctx) => { ... },
TimeOut = TimeSpan.FromMinutes(5)
};
server.Start();
WebSocket 技術本身已標準化,選型核心在於「框架能否處理連線生命週期、錯誤重連、擴展性、運維友善度」。