无论是 PC 端还是移动端,接入网络实现通信都需要建立双端的连接。关注【融云全球互联网通信云】了解更多

客户端和服务端建立连接后不断开,然后进行通信(也就是发送报文)的方式就是长连接。

与之相反,短连接是创建一个连接,在程序执行完毕后,就会自动断掉。

二者相比,短连接会频繁地创建和释放连接,比较耗费资源。长连接就可以避免每次请求都创建连接的开销,节省了时间和消耗,提高了性能。

本文梳理自 8 月 2 日的“IM 进阶实战高手课”内容,通过分析对比常见长连接协议、长连接协议的演进过程来拆解长连接协议设计要点,及融云的最佳实践。


长连接常见问题

安全性

首先是传输上的安全性,数据传输时需要经过通道层及应用层的加密,如 IPSec、TLS、PB 等。

其次,还需保证数据的实效性,具备防重放的特性。类似 5G 终端的认证是通过 SQN 带上时间戳进行矢量校验,保证数据的完整性和加密性。

最后会进行异常客户端的检测,通过动态认证密钥,保证客户端是可信的。

(长连接安全性)

可靠性

包括连接保持、快速重连和消息可达。主要通过心跳保活、弱网处理、就近接入等进行连接保持,设计快速认证重连策略实现低开销,并由 QoS 质量保障确保消息可达。

(长连接可靠性)

低开销

低开销最根本的就是保证协议包体的大小合适,减少流量消耗,以及在解析协议包的时候,减少电量消耗。

并且,在应用及数据存储上减少资源的消耗,以获得更高的吞吐量和接入数。

(长连接低开销)


长连接协议设计要点

长连接协议的设计要点,其实就是主要围绕如何做到低开销、安全性、可靠性以及协议的扩展性、完备性展开的。

(长连接协议设计要点)

业界常见的长连接协议如下:

我们详细看看其中常用的几种,SIP 是一个文本协议,支持 TCP、UDP、IPSec,比较符合国际规范,主要的应用领域是在电信领域如手机短信、手机音视频通话、5G 消息(RCS)、SIP 话机、话务台,它的协议设计规范和业务规范都是咱们可以去参考的。

XMPP 是一个文本协议,通过 XML 传输,具备一定的通信协议规范,易读性比较高,主要应用在即时通讯系统、游戏平台、协作空间以及语音和视频会议系统。这个协议的冗余系数特别高,会带来比较大的流量消耗。

MQTT 是一个开放消息协议,简单易实现。采用发布订阅模式,一对多消息发布。基于 TCP/IP 网络连接,提供有序、无损的双向连接。相较于上面两种协议,它的协议包体特别小。1 字节固定报头,2 字节心跳报文,最小化传输开销和协议交换,有效减少网络流量。

MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域。

接下来咱们看一下这几种协议一般在哪些场景或者层次上应用。

首先手机连网后如果要打电话,会通过 GTP 发送通话或者音视频相关的数据信息。如果需要调用像运营商等技术能力,会通过类似于 XMPP 或者 SIP 去调一些开发能力。
在搭建云平台的时候,需要有长连接通道,一般会有导航或者配置服务去下发地址,然后通过这个地址连上长连接服务。业务的内部通信,一般通过 RPC 进行,比如单聊、群聊、聊天室和超级群。

如果要将这些能力开放出来,就需要有一个开放网关,针对长连接的一些技术做能力开放。

整体而言,常见协议的扩展性和完备性是相反的。

SIP 主要应用在电信领域,它的完备性或者标准业务的设计规范比较高,与此相应,它的扩展性会相对不足。
XMPP 虽然本身协议的开销比较大,但是它的业务接口规范以及逻辑模型是可以参考的。

MQTT 协议的开销比较少,但是它整个上层业务的架设并不是特别丰富。

从演进历史的角度看,网络演进基本上是 10 年一个迭代,每个阶段都会催生不同的应用。

为了解决不同阶段的相应需求问题,传输层协议的演进也有其阶段性。

UDP 和 GDP 的产生基本上是在相同的时间,分别保证传输的速率和可靠性。SCTP 是保证可靠的同时,又保证吞吐量。但是因为它的基础网络相对来说比较稳定,针对时延的考虑不是特别多,后来又有了低时延多链路数据传输的 QUIC 协议。

比起传输层的协议,应用层协议的变化就不是特别大了。它们大部分是在上世纪 90 年代末产生,分别应用于不同的领域,像 HTTP 主要是 WEB,MQTT 主要是物联网,SIP 主要是电信领域在用,XMPP 主要是即时通讯。


融云长连接特性

融云的长连接协议主要考虑了高效性易用性两大方面。其中,高效性包括对安全性、可靠性、完备性、扩展性以及低消耗的综合考量设计。

安全性主要通过通道加密保证通道传输的安全,但是如果架设了中间层和中间人,就需要通过消息体加密保证数据传输的可靠性;在保证了传输层的安全性之后,还需要通过动态密钥和认证码去保证客户端认证的安全性;最后就是保证数据的防重放

可靠性就是需要通过客户端和服务端的双向心跳保活保证电路的可靠性;通过全球网络电路的架设,比如节点之间架设专线,让客户端通过一个比较可靠的就近地址接入,保证数据传输的高效和低时延;然后通过包括 QoS 质量保障、状态送达和弱网优化等来做应用层的消息送达保障

完备性方面,融云提供内容、通知等多种消息类型,单群聊、聊天室、超级群等多种业务类型服务。另外,为了保证排查问题的高效,融云还在协议上进行了全链路消息的串联,实现全链路消息的追踪。融云在长连接协议的设计上,参考了业界常见协议的优势特点,在保证数据传输低开销的同时,又通过自定义消息类型和多层级消息通道、自定义业务流转去保证扩展性

在保证高效性的同时,融云长连接设计还要通过丰富、多端、简便、扩展、统一等特点实现易用性。

业务丰富,单群聊、聊天室、超级群等经典和新兴的业务类型都能满足,同时具备消息的多样性,包括文本、图片、音视频、表情包等消息类型及其他业务场景的自定义消息。

多端覆盖,原生的 Android、iOS,跨平台的 RN、Flutter 等全平台覆盖,保证各端协议的一致性,多端覆盖且易于迭代。

多方统一,保证多端的统一性,长期协议的技术能力与融云通信服务的开放能力是统一的。

开箱即用,通道简便、协议简洁。

高扩展性,在协议层保证业务架设可扩展。

兼具高效与易用,融云 IM 即时通讯长连接协议设计思路相关推荐

  1. 融云 web 即时通讯

    融云 web 即时通讯 ☺ 官网https://www.rongcloud.cn/?utm_source=baiduBrand&utm_term=rongyun 老版本但更为详细的开发文档ht ...

  2. 基于融云的即时通讯开发(一)

    一.概述 现在的应用中,即时通讯功能已经很普遍了,从这篇文章开始,我们以第三方平台融云的服务为基础,研究一下如何开发一个具有及时通信功能的软件. 首先,进入融云的官网,地址如下: http://ron ...

  3. 融云RongIMKit即时通讯开发(让我们聊起来)

    1.前言 现在APP功能越来越多,聊天成为很重要的一个功能,现在市面上流行的即时通讯SDK基本上只有融云和环信,而近年来融云在各个方面都有超过环信的趋势,所以在项目中用到融云的地方越来越多.那我们是不 ...

  4. 融云 IM 即时通讯的跨应用通信能力

    我们常用"跨服聊天"来形容不在统一频道.无法顺畅沟通的鸡同鸭讲现象.关注[融云全球互联网通信云]了解更多 仅一字之差,在通信能力中,"跨 App 聊天"功能则代 ...

  5. iOS---集成融云SDK即时通讯

    链接:https://www.jianshu.com/p/eabfb0a93cf9 相信大家在项目中会用到即时通讯功能,自己去写的话会需要前后台合作,会大大加大开发的周期,所以考虑使用第三方的即时通讯 ...

  6. 30 分钟集成融云 IM 即时通讯

    最近公司要做一个社交 app,对于时间就是金钱的当今社会,招聘大量人才去搭建通讯系统肯定是不划算的,花费人力物力财力做出来的 app,可能还没人用.那就瞎了.所以毋庸置疑,一拍即合,用第三方的.就开始 ...

  7. PC端使用融云IM即时通讯

    融云PC端开发者文档 引入 在public的index.html下引入 <script src="https://cdn.ronghub.com/RongIMLib-2.5.0.min ...

  8. apicloud+融云实现即时通讯

    请尊重作者的辛勤劳动!!! 使用apicloud开发已经快2个月了,起初的目的就是为了实现安卓和苹果的兼容,属于一个试验项目,究竟apicloud是否能够满足公司的要求?最 终看来还是不错的,使用ap ...

  9. laravel composer 融云im即时通信

    laravel7使用composer开发融云im即时通信 开发环境 需要做的准备 开始开发 开发环境 包管理:Composer PHP框架:Laravel7 融云IM:V3.0 需要做的准备 本文档适 ...

最新文章

  1. 【matlab】我要自学网笔记总结 1.3
  2. JVM 调优实战--一个案例理解常用工具(命令)
  3. 前端学习(2579):组件库使用
  4. java ArrayList倒序
  5. 论文精读:《电子政务的服务质量、感知价值与公民持续使用意愿——来自中国的实证经验》
  6. 《嵌入式 – GD32开发实战指南》第10章 串口通信
  7. Matlab 图像平移、旋转、缩放、镜像
  8. movs 数据传送指令_1.数据传送指令中,错误的操作是()。 A.MOVSS[BX+DI],1000H B.......
  9. winform的FormBorderStyle设置为None窗口的最小宽度不能小于132
  10. python-GUI图形界面之Tkinter(常用控件、事件对象、布局管理)
  11. 利用feather快速处理大数据
  12. Teams Bot App 初探
  13. tp路由器桥接成功无法上网怎么办
  14. 机器学习背后的数学:范数与赋范空间
  15. 微信网页版前端源码分析(一)源码结构和公众号处理逻辑
  16. Ubuntu18在4K显示器如何调分辨率
  17. hihoCoder-1633 ACM-ICPC北京赛区2017 G.Liaoning Ship’s Voyage 线段与三角形规范相交
  18. 产品管理工具和项目管理工具
  19. 线程与进程之间的共享资源
  20. 利用python进行AdaBoost模型预测

热门文章

  1. 《液晶显示器和液晶电视维修核心教程》——2.2 电容类
  2. torch.nn.Conv2d介绍
  3. 一键关闭微软自动杀毒软件Windows Defender软件:Defender Control v1.4
  4. 物联网云平台的优势有哪些
  5. 让OCS 2007 R2 的呼叫正确显示Call ID
  6. 简单的方法Android的数据恢复你的Andr​​oid手机
  7. Excel Vba无法连接 远程 Mysql数据库问题的解决方法
  8. 车路协同 智能路侧决策系统边缘计算系统功能技术要求
  9. 实战内容(1)- QQ浏览器屏幕分享报错:GET chrome-extension://invalid/ net::ERR_FAILED
  10. SQL分析阿里云淘宝电商数据