前言
今天給大家推薦一個.NET Core WebSocket實現(xiàn)簡易、高性能、集群即時通訊組件:FreeIM。
官方組件介紹
FreeIM 使用 WebSocket 協(xié)議實現(xiàn)簡易、高性能(單機支持5萬+連接)、集群即時通訊組件,支持點對點通訊、群聊通訊、上線下線事件消息等眾多實用性功能。
WebSocket介紹
WebSocket是一種在Web應(yīng)用程序和服務(wù)器之間建立持久連接的通信協(xié)議。它通過在客戶端和服務(wù)器之間創(chuàng)建一個全雙工通信通道,實現(xiàn)了服務(wù)器主動向客戶端推送數(shù)據(jù)的功能。
相比起傳統(tǒng)的HTTP請求-響應(yīng)模式,WebSocket具有以下幾個優(yōu)勢:
實時性:WebSocket提供了實時的雙向通信,服務(wù)器可以主動推送數(shù)據(jù)給客戶端,而不需要客戶端發(fā)起請求。這使得實時通信應(yīng)用如聊天室、股票行情等變得更加簡單和高效。
減少數(shù)據(jù)傳輸量:WebSocket在建立連接時需要進行握手,之后數(shù)據(jù)幀的開銷較小,只需要發(fā)送少量的控制信息,因此相比于HTTP請求的頭部信息,可以減少數(shù)據(jù)傳輸?shù)拈_銷。
低延遲:由于WebSocket是一個長連接,避免了每次請求都要建立TCP連接的開銷,從而降低了延遲。
節(jié)省服務(wù)器資源:WebSocket使用一個TCP連接進行全雙工通信,相比于傳統(tǒng)的HTTP請求,避免了頻繁的連接和關(guān)閉操作,減少了服務(wù)器的負(fù)擔(dān)。
支持跨域通信:WebSocket允許在瀏覽器中通過Javascript與不同域名下的服務(wù)器進行通信,實現(xiàn)了跨域通信的功能。
項目源碼截圖
設(shè)計思路
終端
(如瀏覽器/小程序/iOS/android) 統(tǒng)一使用 websocket 連接 ImServer
;
ImServer
(支持集群)根據(jù) clientId 分區(qū)管理 websocket 連接;
WebApi
使用 ImHelper 調(diào)用方法(如:SendMessage、群聊相關(guān)方法),將數(shù)據(jù)推至 Redis chan;
ImServer
訂閱 Redis chan,收到消息后向 終端
推送消息;
- 解耦了業(yè)務(wù)和通訊,架構(gòu)更加清淅;
ImServer
充當(dāng)消息轉(zhuǎn)發(fā),連接維護,代碼萬年不變、且不需要重啟維護WebApi
負(fù)責(zé)所有業(yè)務(wù)
ImServer 服務(wù)端
public void Configure(IApplicationBuilder app)
{
app.UseFreeImServer(new ImServerOptions
{
Redis = new FreeRedis.RedisClient("127.0.0.1:6379,poolsize=5"),
Servers = new[] { "127.0.0.1:6001" }, //集群配置
Server = "127.0.0.1:6001"
});
}
WebApi 業(yè)務(wù)端
public void Configure(IApplicationBuilder app)
{
//...
ImHelper.Initialization(new ImClientOptions
{
Redis = new FreeRedis.RedisClient("127.0.0.1:6379,poolsize=5"),
Servers = new[] { "127.0.0.1:6001" }
});
ImHelper.EventBus(
t => Console.WriteLine(t.clientId + "上線了"),
t => Console.WriteLine(t.clientId + "下線了"));
}
Html5 終端
終端連接 websocket 前,應(yīng)該先請求 WebApi 獲得授權(quán)過的地址(ImHelper.PrevConnectServer),偽代碼:
ajax('/prev-connect-imserver', function(data) {
var url = data; //此時的值:ws://127.0.0.1:6001/ws?token=xxxxx
var sock = new WebSocket(url);
sock.onmessage = function (e) {
//...
};
})
項目源碼
更多實用功能特性歡迎前往開源地址查看👀,別忘了給項目一個Star💖。
https://github.com/2881099/FreeIM
該文章在 2023/8/25 9:15:31 編輯過