• 推荐一个.Net Core开发的Websocket群聊、私聊的开源项目


    今天给大家推荐一个使用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 -

    文章首发于公众号【编程乐趣】,欢迎大家关注。
    图片

  • 相关阅读:
    通过有序线性结构构造AVL树
    RTSP/Onvif协议EasyNVR视频平台一键升级方案的开发设计逻辑
    0递归中等 LeetCode306. 累加数
    jenkins+sonar
    HTML案例-4.注册页面表单练习
    十年架构五年生活-07 年轻气盛的蜕变
    MHA高可用及故障切换
    《MySQL实战45讲》阅读笔记
    (2022版)一套教程搞定k8s安装到实战 | ConfiMap
    费时“吃透”4个月啃烂完了这份Redis高手心法,成功上岸收到字节offer
  • 原文地址:https://www.cnblogs.com/chingho/p/17112647.html