IM (一):基本介绍

2017-04-04  本文已影响1157人  LilacZiyun

By 紫韵: 最近对 IM 系统产生了兴趣,就看了些博客,现希望通过一个系列的文章对其稍作总结与记录,如有不对,还望指正。

IM 简介

IM:Instant Messaging,即时通讯,是一个允许两人或多人通过网络实时传输文字、语音、视频等的终端服务,如现在常用的 QQ、微信、百度 Hi 等。IM 完全基于 TCP/IP 网络协议族实现,而 TCP/IP 协议族则是整个互联网得以实现的技术基础。

通讯方式

典型的 IM 通讯方式有如下四种:

P2P && 服务器中转
一般常用的 IM 通讯方式就是 P2P 和服务器中转这两种,下面简要对比分析这两者的区别。

P2P:
P2P 多见于局域网内聊天工具,典型的应用有:飞鸽传书、天网 Maze 等。这类软件在启动后一般做两件事情:
进行 UDP 广播:发送自己信息和接受同局域网内其他端信息;
开启 TCP 监听:等待其他端进行连接。

限制和不便:
只适合 ** 在线 ** 的 ** 点对点 ** 消息传输,对离线、群组等业务支持不够;
由于 NAT 的存在,使得不同局域网内机器互联难度大大上升,在某些网络类型(对称 NAT)下无法建立连接。

** 服务器中转 **
几乎所有互联网 IM 产品都采用服务器中转这种方式进行消息传输,相比于 P2P 的方式,它的优劣如下:

工作方式

** 典型的 IM 工作方式如下:**
客户端登陆 IM 通讯中心(IM 通讯服务器),获取好友列表,获取离线消息,将自身标志为在线状态,与聊天对象建立聊天通道,进行文字、语音等通信。

  1. 用户 A 通过用户名和密码登录 IM 服务器,服务器通过读取数据库中用户信息进行校验,校验通过后,登记用户 A 的 ip 地址、IM 客户端版本号、使用的 TCP/UDP 端口号等并标记用户 A 的状态为在线,返回用户 A 登录成功标志;
  2. 用户 A 获取好有列表信息(包括:在线状态、IP 地址、TCP/UDP 端口号等)、离线消息;
  3. 服务器将用户 A 的在线相关信息通知到其在线好友 ,包括:在线状态、IP 地址、TCP/UDP 端口号等;
  4. 接下来用户 A 就可以通过直连/服务器中转方式与其它用户进行消息通信了。

IM 系统选型

一个典型的 IM 系统的选型过程大致包含如下几个部分:

** IM 系统架构分层:**

一个典型的 IM 系统可能由如下及部分组成:

IM 系统功能点/技术点分析

*** 功能点分析:***

*** 技术点分析:***

移动端 IM 技术难点

** 移动端 IM 客户端难点 **

  1. ** 流量:**移动端流量费较贵,所以省流量是移动端产品特别需要注意的性能指标。可以从网络通信协议、数据通讯协议、图片压缩技术、附件压缩技术等方面着手减少流量消耗;
  2. ** 耗电量 :**移动端的电量比较少,充电比较麻烦,需要注意电量消耗。一般来说,流量越小,耗电量越少;心跳次数越少,耗电量越少,不过这需要结合具体的业务场景来制定恰当的心跳策略;
  3. ** 心跳时长:**WIFI、2G、3G、4G、移动、电信、联通等不同网络、不同运行商下 NAT 失效时间是不一样的,因此心跳的时间也应当区别对待;
  4. ** 掉线重连机制** ;
  5. ** 网络不稳定:**移动端最大的特点就是网络切换频繁,从而导致网络不稳定,并且不同的网络环境下需要进行不同的处理(如 WIFI 网络和移动网络需要区别对待)。在不稳定的网络状态下,如何保证消息的到达率?如何保证消息以最快的速度到达?如何避免重联风暴?这些既需要从整体架构考虑,也需要在移动端采取巧妙的策略加以避免;
  6. ** 文件上传优化 **。

** 移动端架构设计的难点 **

  1. ** 连接器的设计:**连接器主要用来管理客户端的长连接;
  2. ** 中间件的设计:**是否采用通讯中间件?各种通讯中间件的优劣分析与选择?如果不采用中间件,如何管理连接器和逻辑服务器的连接关系?
  3. ** 逻辑服务器:**逻辑服务器通常简单一点,主要是根据业务逻辑进行最小粒度的划分即可;
  4. ** 状态服务器:**状态服务器主要管理用户在线、离线的相关状态。状态同步机制如何实现?状态存储机制,如何进行读写操作从而最大限度地提高状态服务器的处理能力和响应速度;
  5. ** 数据库的设计:**数据库设计相对来说比较难,当业务增长时容易成为性能瓶颈。因为无论是 SQL 关系型数据库,还是 NOSQL 非关系型数据库均有读写处理上限。
  6. ** 其他:**如推送机制、消息的可靠投递、消息同步机制、消息的时序性和一致性如何保证、在线消息和离线消息的区别对待等。这些都是必备而又非常复杂的功能技术点,都需要采取正确的架构和策略才能实现。

参考文章

上一篇 下一篇

猜你喜欢

热点阅读