1. 实现一个即时通讯系统有哪些方式?

  1. 使用开源产品做二次开发或者直接使用

    优点:可以快速的上手,使用

    缺点:功能缺失,可持续性不强,没有团队做后期的维护和扩展,是否和自己公司的技术栈相匹配

  2. 使用付费的云服务商

    优点:既不用开发im系统,也不需要运维服务器,大型的服务商技术比较成熟,消息传递的可靠性高,根据服务商官方的sdk和ui库,很容易的给自己的服务加上im功能

    缺点:无法窥探服务商的源码(闭源),定制化的需求很难满足,官方的扩展如果没有解决你的需求,基本上就无解了,还要有信息和数据是重要的资产,放在别人的手里不太好,服务的费用高

  3. 自研

    优点:切合公司技术栈进行开发,不用担心后期维护,定制自己的需求,数据安全得到保护

    缺点:需要有特别熟悉im系统的人开发,对技术水平有一定的要求,人力成本增加

2. 早期即时通讯系统是如何实现

Untitled

这是早期的京东客服实现的技术架构,这个架构会造成资源的浪费,没有消息发送的时候,轮询也不会停止

3. 一套即时通讯系统的基本组成

Untitled

**客户端:**PC端(MAC、WINDOS)、手机端(安卓、苹果)、WEB端

**接入层:**im系统的门户,是im系统中较为核心的模块,维护着客户端和服务端的长链接,消息由客户端发送给接入层,接入层交递给逻辑层进行处理;接入层一共有四个功能:

  1. 保持长连接
  2. 协议解析
  3. session维护
  4. 消息推送

**逻辑层:**业务系统的一个又一个的模块:用户、关系链、群组、消息 **存储层:**MySQL、Redis

4. 当下的即时通讯系统常用架构

Untitled

长连接在收发消息即时,有消息来可以通过长连接可以直接投递给用户,对比长轮询而言,避免了许多的空循环

总结

**接入层:**去维护我们客户端的长连接和消息的收发,协议可以考虑使用TCP协议(可靠的);选择一个合适的应用层协议(MQTT、XMPP、私有协议);接入层还要做好用户session的维护,接入层和传统的web开发有不同,接入层是有状态的服务,传统的http是无状态的服务