今天給大家推薦一個使用Websocket協定實現的、高效能即時聊天元件,可用於群聊、好友聊天、遊戲直播等場景。
這是一個基於.Net Core開發的、簡單、高效能的通訊元件,支援對等傳送、群聊、線上狀態的訂閱。
該專案還包含群聊例子,可以用於學習。
1、跨平臺:基於.NetCore開發,支援Windows、Mono、Liunx、Windows Azure、Docker。
2、支援 .NetCore 6.0+。
3、元件:Redis。
1、對等通訊;
2、是否線上獲取,以及線上狀態訂閱;
3、加入頻道、離開頻道、獲取線上人數、清理未線上的使用者端、獲取客戶加入的所有頻道、傳送群聊訊息。
FreeIM為通訊元件,ImServer為伺服器端、WebApi為群聊前端。
伺服器端
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Console.OutputEncoding = Encoding.GetEncoding("GB2312");
Console.InputEncoding = Encoding.GetEncoding("GB2312");
app.UseDeveloperExceptionPage();
app.UseFreeImServer(new ImServerOptions
{
Redis = new FreeRedis.RedisClient(Configuration["ImServerOption:RedisClient"]),
Servers = Configuration["ImServerOption:Servers"].Split(";"),
Server = Configuration["ImServerOption:Server"]
});
}
設定資訊
"ImServerOption": {
//Reidis地址
"RedisClient": "127.0.0.1:6379,poolsize=10",
//叢集地址,可以設定多個
"Servers": "127.0.0.1:6001",
//伺服器端地址
"Server": "127.0.0.1:6001"
}
群聊使用者端
public void Configure(IApplicationBuilder app)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Console.OutputEncoding = Encoding.GetEncoding("GB2312");
Console.InputEncoding = Encoding.GetEncoding("GB2312");
app.UseDeveloperExceptionPage();
app.UseRouting();
app.UseEndpoints(config => config.MapControllers());
app.UseDefaultFiles();
app.UseStaticFiles();
//Redis、伺服器端地址
ImHelper.Initialization(new ImClientOptions
{
Redis = new FreeRedis.RedisClient("127.0.0.1:6379,poolsize=10"),
Servers = new[] { "127.0.0.1:6001" }
});
ImHelper.Instance.OnSend += (s, e) =>
Console.WriteLine($"ImClient.SendMessage(server={e.Server},data={JsonConvert.SerializeObject(e.Message)})");
//傳送訊息
ImHelper.EventBus(
t =>
{
Console.WriteLine(t.clientId + "上線了");
var onlineUids = ImHelper.GetClientListByOnline();
ImHelper.SendMessage(t.clientId, onlineUids, $"使用者{t.clientId}上線了");
},
t => Console.WriteLine(t.clientId + "下線了"));
}
群聊截圖
更多開源專案請檢視:一個專注推薦優秀.Net開源專案的榜單
- End -
文章首發於公眾號【程式設計樂趣】,歡迎大家關注。