前言
给大家推荐一个使用Websocket协议实现的、高性能即时聊天组件,可用于群聊、好友聊天、游戏直播等场景。
项目简介
这是一个基于.Net Core开发的、简单、高性能的通讯组件,支持点对点发送、群聊、在线状态的订阅。该项目还包含群聊例子,可以用于学习。
技术架构
1、跨平台:基于.NET Core开发,支持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