相关文章推荐
深情的可乐  ·  集成 - 如何在 Azure API 管理 ...·  2 月前    · 
闯红灯的毛巾  ·  如何自行开发代码访问阿里语音服务_智能语音交 ...·  2 月前    · 
健身的键盘  ·  关于公布2017-2018年度第一批北京市建 ...·  8 月前    · 
安静的熊猫  ·  Oracle数据库学习-腾讯云开发者社区-腾讯云·  1 年前    · 
豪气的毛豆  ·  塘沽安阳桥于新桥什么时候开建_塘沽安阳桥于新 ...·  1 年前    · 
踢足球的遥控器  ·  STITCHES - 汉语翻译 - ...·  1 年前    · 
精明的钥匙扣  ·  2023-24赛季欧协联第二轮资格赛战报,第 ...·  1 年前    · 
Code  ›  .NET Core WebSocket实现简易、高性能、集群即时通讯组件-阿里云开发者社区
集群服务器 数据库集群 云数据库 websocket
https://developer.aliyun.com/article/1332797
玉树临风的山羊
1 年前
产品 解决方案 文档与社区 免费试用 定价 云市场 合作伙伴 支持与服务 了解阿里云
备案 控制台 登录/注册
开发者社区
首页
探索云世界
新手上云 云上应用构建 云上数据管理 云上探索人工智能
云计算 弹性计算 无影 存储 网络 倚天
云原生 容器 serverless 中间件 微服务 可观测 消息队列
数据库 关系型数据库 NoSQL数据库 数据仓库 数据管理工具 PolarDB开源 向量数据库

热门

Modelscope模型即服务 弹性计算 云原生 数据库 物联网 云效DevOps 龙蜥操作系统 平头哥 钉钉开放平台
大数据 大数据计算 实时数仓Hologres 实时计算Flink E-MapReduce DataWorks Elasticsearch 机器学习平台PAI 智能搜索推荐
人工智能 机器学习平台PAI 视觉智能开放平台 智能语音交互 自然语言处理 多模态模型 pythonsdk 通用模型
开发与运维 云效DevOps 钉钉宜搭 支持服务 镜像站 码上公益
问产品
动手实践
考认证
TIANCHI大赛
活动广场
任务中心 飞天Club技术沙龙 训练营 话题 开发者评测 乘风者计划 阿里云MVP 直播
下载
镜像站 技术资料 插件
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

image

前言

今天给大家推荐一个.NET Core WebSocket实现简易、高性能、集群即时通讯组件:FreeIM。

官方组件介绍

FreeIM 使用 WebSocket 协议实现简易、高性能(单机支持5万+连接)、集群即时通讯组件,支持点对点通讯、群聊通讯、上线下线事件消息等众多实用性功能。

WebSocket介绍

WebSocket是一种在Web应用程序和服务器之间建立持久连接的通信协议。它通过在客户端和服务器之间创建一个全双工通信通道,实现了服务器主动向客户端推送数据的功能。

相比起传统的HTTP请求-响应模式,WebSocket具有以下几个优势:

  1. 实时性:WebSocket提供了实时的双向通信,服务器可以主动推送数据给客户端,而不需要客户端发起请求。这使得实时通信应用如聊天室、股票行情等变得更加简单和高效。
  2. 减少数据传输量:WebSocket在建立连接时需要进行握手,之后数据帧的开销较小,只需要发送少量的控制信息,因此相比于HTTP请求的头部信息,可以减少数据传输的开销。
  3. 低延迟:由于WebSocket是一个长连接,避免了每次请求都要建立TCP连接的开销,从而降低了延迟。
  4. 节省服务器资源:WebSocket使用一个TCP连接进行全双工通信,相比于传统的HTTP请求,避免了频繁的连接和关闭操作,减少了服务器的负担。
  5. 支持跨域通信:WebSocket允许在浏览器中通过JavaScript与不同域名下的服务器进行通信,实现了跨域通信的功能。

项目源码截图

image


设计思路

终端 (如浏览器/小程序/iOS/android) 统一使用 websocket 连接 ImServer ;

ImServer (支持集群)根据 clientId 分区管理 websocket 连接;

WebApi 使用 ImHelper 调用方法(如:SendMessage、群聊相关方法),将数据推至 Redis chan;

ImServer 订阅 Redis chan,收到消息后向 终端 推送消息;

  • 缓解了并发推送消息过多的问题;
  • 解决了连接数过多的问题;
  • 解耦了业务和通讯,架构更加清淅;
    • ImServer 充当消息转发,连接维护,代码万年不变、且不需要重启维护
    • WebApi 负责所有业务

ImServer 服务端

public void Configure(IApplicationBuilder app)





    
    app.UseFreeImServer(new ImServerOptions
        Redis = new FreeRedis.RedisClient("127.0.0.1:6379,poolsize=5"),
        Servers = new[] { "127.0.0.1:6001" }, //集群配置
        Server = "127.0.0.1:6001"
}

WebApi 业务端

public void Configure(IApplicationBuilder app)
    //...
    ImHelper.Initialization(new ImClientOptions
        Redis = new FreeRedis.RedisClient("127.0.0.1:6379,poolsize=5"),
        Servers = new[] { "127.0.0.1:6001" }
    ImHelper.EventBus(
        t => Console.WriteLine(t.clientId + "上线了"), 
        t => Console.WriteLine(t.clientId + "下线了"));
}

Html5 终端

终端连接 websocket 前,应该先请求 WebApi 获得授权过的地址(ImHelper.PrevConnectServer),伪代码:

ajax('/prev-connect-imserver', function(data) {
    var url = data; //此时的值:ws://127.0.0.1:6001/ws?token=xxxxx
    var sock = new WebSocket(url);
    sock.onmessage = function (e) {
        //...
})

项目源码

更多实用功能特性欢迎前往开源地址查看👀,别忘了给项目一个Star💖。

https://github.com/2881099/FreeIM

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发效率和质量。坑已挖,欢迎大家踊跃提交PR,自荐( 让优秀的项目和框架不被埋没🤞 )。

https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md

云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
 
推荐文章
深情的可乐  ·  集成 - 如何在 Azure API 管理 中使用 Web PubSub for Socket.IO | Microsoft Learn
2 月前
闯红灯的毛巾  ·  如何自行开发代码访问阿里语音服务_智能语音交互(ISI)-阿里云帮助中心
2 月前
健身的键盘  ·  关于公布2017-2018年度第一批北京市建筑长城杯工程及单位名单的通知
8 月前
安静的熊猫  ·  Oracle数据库学习-腾讯云开发者社区-腾讯云
1 年前
豪气的毛豆  ·  塘沽安阳桥于新桥什么时候开建_塘沽安阳桥于新桥什么时候开建的_于新桥安阳桥最新 - 抖音
1 年前
踢足球的遥控器  ·  STITCHES - 汉语翻译 - bab.la英语-汉语词典
1 年前
精明的钥匙扣  ·  2023-24赛季欧协联第二轮资格赛战报,第三轮对阵&最终轮抽签出炉
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号