提供坪山网站建设,html网站开发工具,什么样的网站需要服务器,创新驱动发展战略的内容分享利用 redis 订阅与发布特性#xff0c;巧妙的现实高性能im系统。为表诚意#xff0c;先贴源码地址#xff1a;https://github.com/2881099/im下载源码后的运行方法#xff1a;运行环境#xff1a;.NETCore 2.1 redis-server 2.8下载Redis-x64-2.8.2402.zip#xff0… 分享利用 redis 订阅与发布特性巧妙的现实高性能im系统。为表诚意先贴源码地址https://github.com/2881099/im下载源码后的运行方法运行环境.NETCore 2.1 redis-server 2.8下载Redis-x64-2.8.2402.zip点击 start.bat 运行或者修改 imServer、web 下面 appsettings.json redis 配置指向可用的redis-servercd imServer dotnet run --urlshttp://0.0.0.0:6001cd web dotnet run --urlshttp://0.0.0.0:5555打开多个浏览器访问 http://127.0.0.1:5555 发送群消息设计思路socket选型最二的办法是浏览器端使用websocket其他端socket这么混乱的设计最终将非常难维护。所以强烈建议所有端都使用websocket协议adorid/ios/h5/小程序全部支持websocket客户端。业务与通讯协议im系统一般涉及【我的好友】、【我的群】、【历史消息】等等。。那么imServer与业务方(web)该保持何种关系呢用户A向好友B发送消息分析一下需要判断B是否为A好友需要判断A是否有权限等等。。诸如此类业务判断会很复杂我们试想一下如果使用imServer做业务协议它是不是会变成巨无霸难以维护。又假如获取历史记录难道客户端要先websocket.send(gethistory)再在onmessage里定位回调处理这样做十分之二。。。咱这样设计所有用户的主动行为走业务方(web)imServer只负责即时消息推送。什么意思用户A向好友B发送消息客户端请求业务方(web)接口由业务方(web)后端向imServer发起推送请求imServer收到指令后向前端用户B的websocket发送数据用户B收到了消息。获取历史消息客户端请求业务方(web)接口返回json(历史消息)回执用户A如何知道消息发送状态成功或失败或不在线imServer端向用户B发送消息时把状态以消息的方式推给用户A即可按上面的逻辑具体请看源码吧。。。web通知imServer性能优化采用消息队列redis的发布订阅最为轻量。实现多节点部署单个imServer实例支持多少websocket连接几百个没问题吧好。。。如果系统在线用户有1万人怎么办可以根据id的hash分区比如部署4个imServerimServer1 订阅 redisChanne1imServer2 订阅 redisChanne2imServer3 订阅 redisChanne3imServer4 订阅 redisChanne4业务方(web)端根据接收方的id的hash分区算法定位到对应的redisChannel这样publish就可以将消息定位到相应的imServer了 原文地址https://www.cnblogs.com/kellynic/p/9286645.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com