IM系统(即时通讯系统)初识

IM系统概述

  • IM是即时通讯的缩写,它指的是一种网络通讯技术,可以让用户在网络上进行实时的文字、语音、视频等多种形式的交流和沟通。IM技术可以让用户在不同的地点、不同的时间实现即时通讯,方便了人们的沟通和交流。
  • IM(Instant Messaging)系统通常包括客户端软件和服务器端软件,用户可以通过客户端软件连接服务器,实现与其他用户的即时通讯。常见的IM系统包括QQ、微信、Skype、WhatsApp等。

即时通讯应用和即时通讯系统

  • 即时通讯应用是一种可以实时交流信息的软件应用程序,例如WeChat、QQ等。应用程序通常提供文字、语音、图片和视频等多种形式的信息交流方。

  • 即时通讯系统则是一种基于计算机网络的软件系统,用于实现即时通讯应用程序的功能。即时通讯系统通常由服务器和客户端组成,服务器用于处理用户之间的通讯请求和消息传递,客户端则是用户使用的应用程序。
    在这里插入图片描述

现有系统添加IM功能

实现方式有三种:

  1. 使用开源产品做二次开发或直接使用
  2. 使用付费的云服务商
  3. 使用自研
实现方式 优点 缺点
使用开源产品做二次开发或直接使用 - 开源产品通常有较好的稳定性和安全性。
- 可以根据需求进行二次开发,定制化程度高。
- 开源产品通常免费或价格较低。
- 需要有一定的技术能力来进行二次开发和维护。
- 开源产品可能存在一些限制,如并发量、性能等。
使用付费的云服务商 - 云服务商通常有较好的稳定性和安全性。
- 无需自行搭建服务器和维护,节省了成本和人力。
- 可以根据需求选择不同的服务套餐,灵活性高。
- 依赖于云服务商的服务质量和稳定性。
- 可能会存在一些限制,如并发量、性能等。
使用自研 - 可以根据需求进行定制化开发,灵活性高。
- 可以完全掌控系统的安全性和稳定性。
- 需要有较高的技术能力和资源。
- 需要考虑到服务器的部署、维护和安全性等问题。

早期即时通讯系统架构

在这里插入图片描述

  • 长轮询是一种早期的即时通讯系统实现方式,它的基本原理是客户端向服务器发送一个请求,服务器在等待有新消息到来时才返回响应。如果服务器没有新消息,就会等待一段时间后再返回响应,客户端再次发送请求,如此循环。

长轮询的优点:

  1. 实现简单:长轮询的实现比较简单,只需要客户端和服务器之间进行HTTP请求和响应即可。
  2. 可靠性高:长轮询可以保证消息的可靠性,因为客户端只有在服务器有新消息时才会收到响应。
  3. 兼容性好:长轮询可以在大多数浏览器和操作系统上运行,兼容性较好。
    长轮询的缺点:
  4. 实时性差:长轮询需要等待一段时间才能返回响应,实时性较差,无法满足高实时性的应用场景。
  5. 资源浪费:长轮询需要客户端频繁地向服务器发送请求,服务器需要维护大量的长连接,会浪费服务器资源。
  6. 延迟高:长轮询的延迟较高,因为客户端需要等待一段时间才能收到响应。
  • 长轮询的优点是实现简单、可靠性高、兼容性好,缺点是实时性差、资源浪费、延迟高。在现代的即时通讯系统中,长轮询已经被WebSocket等更高效的实现方式所取代。

即时通讯系统的基本组成

  • 一套即时通讯系统的基本组成包括客户端、接入层、逻辑层和存储层
    在这里插入图片描述
  1. 客户端:用户通过客户端进行消息的发送和接收。客户端可以是基于桌面、移动设备或网页等不同平台的应用程序,提供文字、语音、图片和视频等多种形式的信息交流方式。

  2. 接入层:负责处理客户端和服务器之间的通讯请求和消息传递。接入层可以使用HTTP、WebSocket等不同的网络协议来实现消息传递,同时可以支持多种客户端协议,例如XMPP、MQTT等。

  3. 逻辑层:即时通讯系统的核心负责处理用户之间的通讯请求和消息传递,包括用户认证、消息传递、在线状态管理等功能。逻辑层可以使用Java、Python、C++等不同的编程语言,同时可以使用一些框架和工具来加速开发,例如Netty、Spring、Django等。

  4. 存储层:即时通讯系统的数据存储层,用于存储用户信息、聊天记录等数据。存储层可以使用关系型数据库(如MySQL、PostgreSQL等)或NoSQL数据库(如MongoDB、Redis等),同时可以使用一些缓存技术来提高系统的性能和可扩展性。

  • 综上所述,一套即时通讯系统的基本组成包括客户端、接入层、逻辑层和存储层,它们各自承担不同的功能,协同工作来实现即时通讯系统的各种功能。

当代即时通讯系统常用架构

在这里插入图片描述

  • 服务端拆分成接入层和逻辑层

    • 接入层负责收集客户端发来的消息,交替给逻辑层处理,当逻辑层处理完消息后,也是通过接入层将处理过后的消息投递给客户端。接入层可以认为是im系统中的门户,是整个im系统中较为核心的一块。维护着服务端与客户端的长连接,为客户端提供消息收发的入口。接入层主要分为四个功能:保持长连接、协议解析、筛选维护、消息推送
    • 逻辑层需要保证消息不丢不漏不串。最基本的im系统包含用户关系链群组消息作为基础模块,几大基础模块为消息的投递奠定了基本的逻辑交互。比如:用户a给用户b发送消息,是否需要好友关系才能发送消息?如果是群聊消息,那么用户是否在群内?这个群是否开启禁言?这些都需要逻辑层配合接入层去实现。
  • 存储层负责数据的持久化

    • 关系型数据库是目前程序开发中最首选的一种存储介质,在保存用户关系链群组,这类关系型数据不在话下。
      聊天记录这类数据在做好分布分表之后,也能存下海量的数据。但是,对于热点数据查询频率过高的离线消息,关系型数据库就不太合适,可以考虑另一种存储介质,如:redis

  • 数据在当代即时通讯系统流转过程分析:客户端发送消息给接入层,接入层发送给逻辑层,逻辑层处理之后进行持久化,持久化后返回给接入层,接入层再路由给客户端。

猜你喜欢

转载自blog.csdn.net/yang2330648064/article/details/134955635