推薦一個簡單易用、輕量級的C#開源WebSocket服務(wù)端庫,方便我們快速實現(xiàn)WebSocket的開發(fā)。
01
項目簡介
Fleck 是一個用 C# 編寫的輕量級 WebSocket 服務(wù)器庫。它提供了一個簡單而直觀的 API,使得開發(fā)者可以輕松地在他們的應(yīng)用程序中集成 WebSocket 功能,比如一些常見的實時通信應(yīng)用,在線游戲、聊天應(yīng)用和實時數(shù)據(jù)更新等場景。
Fleck 的設(shè)計目標(biāo)是易于使用和高性能,同時保持代碼的簡潔性。
02
項目優(yōu)缺點
1、優(yōu)點
簡單易用:Fleck 的 API 設(shè)計簡潔,不需要復(fù)雜的配置或繼承,使得開發(fā)者可以快速上手。
無依賴:Fleck 不依賴于 HttpListener 或 HTTP.sys,這意味著它可以在沒有這些組件的系統(tǒng)上運行,如 Windows 7 和 Server 2008。
2、缺點
功能限制:Fleck 專注于簡單和輕量,不包含一些高級功能,如復(fù)雜的認(rèn)證機制或詳細(xì)的統(tǒng)計信息。
03
使用方法
1、一個簡單的 WebSocket 服務(wù)器的示例
// 創(chuàng)建一個新的 WebSocket 服務(wù)器實例,監(jiān)聽在所有網(wǎng)絡(luò)接口的 8181 端口上。
var server = new WebSocketServer("ws://0.0.0.0:8181");
// 調(diào)用 server 實例的 Start 方法啟動服務(wù)器。
// Start 方法接受一個 lambda 表達(dá)式作為參數(shù),該表達(dá)式定義了如何處理新的 WebSocket 連接。
server.Start(socket =>
{
// 當(dāng) WebSocket 連接打開時,觸發(fā) OnOpen 事件,并輸出 "Open!" 到控制臺。
socket.OnOpen = () => Console.WriteLine("Open!");
// 當(dāng) WebSocket 連接關(guān)閉時,觸發(fā) OnClose 事件,并輸出 "Close!" 到控制臺。
socket.OnClose = () => Console.WriteLine("Close!");
// 當(dāng)服務(wù)器接收到來自客戶端的消息時,觸發(fā) OnMessage 事件。
// 這個事件的處理程序接收一個參數(shù) message,它包含了從客戶端接收到的消息。
// 然后,使用 socket.Send 方法將接收到的消息發(fā)送回客戶端。
socket.OnMessage = message => socket.Send(message);
});
2、安全WebSockets (wss://)
// 創(chuàng)建一個新的 WebSocket 服務(wù)器實例,監(jiān)聽在所有網(wǎng)絡(luò)接口的 8431 端口上,并使用 wss 協(xié)議,即 WebSocket Secure。
var server = new WebSocketServer("wss://0.0.0.0:8431");
// 為服務(wù)器設(shè)置一個 X509 證書,這個證書用于建立 TLS/SSL 加密連接。
// "MyCert.pfx" 是證書文件的名稱,通常包含證書和私鑰。
server.Certificate = new X509Certificate2("MyCert.pfx");
// 調(diào)用 server 實例的 Start 方法啟動服務(wù)器。
server.Start(socket =>
{
//...use as normal
});
// 創(chuàng)建一個新的 WebSocket 服務(wù)器實例,監(jiān)聽在所有網(wǎng)絡(luò)接口的 8181 端口上,并使用 ws 協(xié)議,即非加密的 WebSocket。
var server = new WebSocketServer("ws://0.0.0.0:8181");
// 設(shè)置服務(wù)器支持的子協(xié)議列表。子協(xié)議允許客戶端和服務(wù)器之間協(xié)商使用特定的通信協(xié)議。
// 在這個例子中,服務(wù)器聲明支持 "superchat" 和 "chat" 兩個子協(xié)議。
server.SupportedSubProtocols = new []{ "superchat", "chat" };
// 調(diào)用 server 實例的 Start 方法啟動服務(wù)器。
// Start 方法接受一個 lambda 表達(dá)式作為參數(shù),該表達(dá)式定義了如何處理新的 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、自動監(jiān)測錯誤重新啟動
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,F(xiàn)irefox 4)
Hybi-07(Firefox 6)
Hybi-10(Chrome 14-16,F(xiàn)irefox 7)
Hybi-13(Chrome 17+,F(xiàn)irefox 11+,Safari 6+,Edge 13+(?))
05
項目地址
https://github.com/statianzo/Fleck
該文章在 2024/11/26 9:36:17 編輯過