推薦一個簡單易用、輕量級的C#開源WebSocket服務端庫,方便我們快速實現WebSocket的開發。
01
項目簡介
Fleck 是一個用 C# 編寫的輕量級 WebSocket 服務器庫。它提供了一個簡單而直觀的 API,使得開發者可以輕松地在他們的應用程序中集成 WebSocket 功能,比如一些常見的實時通信應用,在線游戲、聊天應用和實時數據更新等場景。
Fleck 的設計目標是易于使用和高性能,同時保持代碼的簡潔性。
02
項目優缺點
1、優點
簡單易用:Fleck 的 API 設計簡潔,不需要復雜的配置或繼承,使得開發者可以快速上手。
無依賴:Fleck 不依賴于 HttpListener 或 HTTP.sys,這意味著它可以在沒有這些組件的系統上運行,如 Windows 7 和 Server 2008。
2、缺點
功能限制:Fleck 專注于簡單和輕量,不包含一些高級功能,如復雜的認證機制或詳細的統計信息。
03
使用方法
1、一個簡單的 WebSocket 服務器的示例
// 創建一個新的 WebSocket 服務器實例,監聽在所有網絡接口的 8181 端口上。
var server = new WebSocketServer("ws://0.0.0.0:8181");
// 調用 server 實例的 Start 方法啟動服務器。
// Start 方法接受一個 lambda 表達式作為參數,該表達式定義了如何處理新的 WebSocket 連接。
server.Start(socket =>
{
// 當 WebSocket 連接打開時,觸發 OnOpen 事件,并輸出 "Open!" 到控制臺。
socket.OnOpen = () => Console.WriteLine("Open!");
// 當 WebSocket 連接關閉時,觸發 OnClose 事件,并輸出 "Close!" 到控制臺。
socket.OnClose = () => Console.WriteLine("Close!");
// 當服務器接收到來自客戶端的消息時,觸發 OnMessage 事件。
// 這個事件的處理程序接收一個參數 message,它包含了從客戶端接收到的消息。
// 然后,使用 socket.Send 方法將接收到的消息發送回客戶端。
socket.OnMessage = message => socket.Send(message);
});
2、安全WebSockets (wss://)
// 創建一個新的 WebSocket 服務器實例,監聽在所有網絡接口的 8431 端口上,并使用 wss 協議,即 WebSocket Secure。
var server = new WebSocketServer("wss://0.0.0.0:8431");
// 為服務器設置一個 X509 證書,這個證書用于建立 TLS/SSL 加密連接。
// "MyCert.pfx" 是證書文件的名稱,通常包含證書和私鑰。
server.Certificate = new X509Certificate2("MyCert.pfx");
// 調用 server 實例的 Start 方法啟動服務器。
server.Start(socket =>
{
//...use as normal
});
// 創建一個新的 WebSocket 服務器實例,監聽在所有網絡接口的 8181 端口上,并使用 ws 協議,即非加密的 WebSocket。
var server = new WebSocketServer("ws://0.0.0.0:8181");
// 設置服務器支持的子協議列表。子協議允許客戶端和服務器之間協商使用特定的通信協議。
// 在這個例子中,服務器聲明支持 "superchat" 和 "chat" 兩個子協議。
server.SupportedSubProtocols = new []{ "superchat", "chat" };
// 調用 server 實例的 Start 方法啟動服務器。
// Start 方法接受一個 lambda 表達式作為參數,該表達式定義了如何處理新的 WebSocket 連接。
server.Start(socket =>
{
//socket.ConnectionInfo.NegotiatedSubProtocol is populated
});
ILog logger = LogManager.GetLogger(typeof(FleckLog));
FleckLog.LogAction = (level, message, ex) => {
switch(level) {
case LogLevel.Debug:
logger.Debug(message, ex);
break;
case LogLevel.Error:
logger.Error(message, ex);
break;
case LogLevel.Warn:
logger.Warn(message, ex);
break;
default:
logger.Info(message, ex);
break;
}
};
var server = new WebSocketServer("ws://0.0.0.0:8181");
server.ListenerSocket.NoDelay = true;
server.Start(socket =>
{
//Child connections will not use Nagle's Algorithm
});
6、自動監測錯誤重新啟動
var server = new WebSocketServer("ws://0.0.0.0:8181");
server.RestartAfterListenError = true;
server.Start(socket =>
{
//...use as normal
});
04
支持WebSocket版本
Hixie-Draft-76/Hybi-00(Safari 5,Chrome < 14,Firefox 4)
Hybi-07(Firefox 6)
Hybi-10(Chrome 14-16,Firefox 7)
Hybi-13(Chrome 17+,Firefox 11+,Safari 6+,Edge 13+(?))
05
項目地址
https://github.com/statianzo/Fleck
該文章在 2024/11/26 9:36:17 編輯過