.NET 6.0 开发的Websocket群聊、私聊的开源项目FreeIM

前言

给大家推荐一个使用Websocket协议实现的、高性能即时聊天组件,可用于群聊、好友聊天、游戏直播等场景。

项目简介

这是一个基于.Net Core开发的、简单、高性能的通讯组件,支持点对点发送、群聊、在线状态的订阅。该项目还包含群聊例子,可以用于学习。

技术架构

1、跨平台:基于.NET Core开发,支持Windows、Mono、Liunx、Windows Azure、Docker。.

2、支持 .NetCore 6.0+。

3、组件:Redis。

组件功能

1、点对点通讯;

2、是否在线获取,以及在线状态订阅;

3、加入频道、离开频道、获取在线人数、清理未在线的客户端、获取客户加入的所有频道、发送群聊消息。

项目结构

.NET 6.0 开发的Websocket群聊、私聊的开源项目FreeIM

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 6.0 开发的Websocket群聊、私聊的开源项目FreeIM

项目地址

https://github.com/2881099/FreeIM