聊天软件的基本架构是怎么样的? - 知乎
的有关信息介绍如下:
FreeIM 是一种简易、高性能的即时通讯组件,支持点对点通讯、群聊通讯、上线下线事件消息等功能。它使用 websocket 协议实现,单机支持5万+连接,集群即时通讯,适用于好友聊天、群聊天、直播间、实时评论区、游戏等场景。FreeIM 解耦了通讯与业务模块,使得项目架构简单易维护,设计至今仍不过时。提供 ImServer 服务端支持 .NET 5.0、.NET Core 2.1+、NET Standard2.0,以及 ImHelper API 供业务端使用,例如 ImHelper.SendMessage。开源地址:github.com/2881099/FreeIM。FreeIM 架构的引入解决了原有 IM 服务端的痛点,如代码臃肿、逻辑混乱、业务与通讯职责冲突、维护成本高等问题。在经历 1年半的生产环境后,整理代码于 2018 年开源。它简化了架构,提高了效率。作为一个.NET6零基础入门教程,提供了99个视频课时,从零开始了解.NET、项目、以及核心语法,帮助学员高效掌握.NET6技术,独立完成基于.NET6的完整实战。点击这里获取免费视频教程和配套源码。FreeIM 架构设计遵循以下原则:终端统一使用 websocket 连接 ImServer,ImServer 根据 clientId 分区管理连接,WebApi 使用 ImHelper 调用方法将数据推至 Redis channel,ImServer 订阅 Redis channel 并向终端推送消息。这种分离设计使得业务和推送独立,终端连接永不更新重启 ImServer,业务代码在 WebApi 编写,无需担心连接断开。FreeIM 强依赖 redis-server 组件功能实现集群分区,部署多台 ImServer 实例,WebApi 根据接收方的 clientId 后四位 16 进制与节点总数取模定位,进行 redis->publish 操作,ImServer 订阅并向对应终端推送消息。事件消息如上线、下线等通过 redis 发布订阅机制处理,WebApi 通过 ImHelper.EventBus 方法订阅捕捉。为什么说 SignalR 不适合做 IM?原因在于 IM 需要长连接,轮训功能用不上;SignalR 是双工通讯设计,终端 使用 hub.invoke 发送命令给服务端处理业务,而 IM 需要单工通讯;过多使用 hub 导致服务端业务入侵,频繁变化的业务代码会导致每次部署终端断开连接,影响用户体验。



