推薦一個.Net Core開發的Websocket群聊、私聊的開源專案

2023-05-10 15:00:29

今天給大家推薦一個使用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 + "下線了"));
}

群聊截圖

專案地址

https://github.com/2881099/FreeIM

更多開源專案請檢視一個專注推薦優秀.Net開源專案的榜單

- End -

文章首發於公眾號【程式設計樂趣】,歡迎大家關注。