即时通信(IM=nstant messaging)和实时通信(rtc=Real-time communication)都是一套网络通信系统,其本质都是对信息进行转发。其最大的不同点,是对信息传递的时间规定。二者的区别可以从以下几个方面:

一、场景

  1. 即时通信

常见场景包括文字聊天、语音消息发送、文件传输、音视频播放等。通俗的说,就是发短信。

  1. 实时通信

场景包括语音、视频电话会议、网络电话等。通俗的说,就是打电话。

二、要求

  1. 即时通讯

主要要求可靠,考核送达率。要是你发一条短信,结果丢了,对方没收到!你再也不相信短信了吧。

  1. 实时通信

主要要求低延时和接通率。

    • 低延时:你打一通电话,每说一句话,对方得几秒钟才有回应,这电话你也讲不下去了吧。
    • 接通率:你打电话,你这边听到接通了,实际上对方的手机毫无反应,这实际上就没接通。

三、技术环节

  1. 即时通信

消息发送和确认,【消息接入端、服务端消息逻辑处理,服务端消息缓存和存储,转发,服务端用户状态管理,心跳机制,消息发送端】、消息接收和确认。

  1. 实时通信

技术环节:采集、前处理、编码、【服务端接入、转发、服务端接入】、解码、播放和渲染。

这些技术环节重合的部分是:信息转发。

四、传输协议

公共互联网上,最常用的通信协议有TCP、UDP。

  • TCP:Transmission Control Protocol,传输控制协议是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。有延迟不可控的特点。
  • UDP:User Data Protocol,用户数据报协议,是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。 存在丢包、抖动、延迟的特征。

即时通信系统为了保证连接的可靠性,最常用的是TCP协议或者类TCP连接协议。这类协议的特点是追求连接的可靠性,而造成了延迟的不可控性,超过2秒的延迟响应是常态,甚至几十分钟的延迟响应,而电信级的实时通信标准是400ms,而基于互联网的实时通信需要另辟蹊径,开创出新的传输解决方案。发短信,延迟几秒钟送达,对使用者影响不大。

实时通信,一般采用 UDP 作为基础传输协议。在设计低延时的实时通信服务时,UDP 表现要比 TCP 好得多。这是因为实时通信中,低时延比可靠性更重要。打电话,几秒的延迟是不能忍受的。

TCP协议封装了消息的重传机制,在丢包的情况下,采用TCP协议的应用程序几乎无法优化这个重传机制,来达到低时延的效果。特别是在移动互联网络中,超过30%丢包时,TCP 的延时可以到几十分钟, 超过 50%丢包时,甚至很容易断开。 在同样丢包30%的链路上,UDP还可以传输数据,TCP就无法进行实时通信了。

五、成本

成本涉及到的环节有:服务端接入、存储和转发。

二者成本会产生差异的环节有:

  • 从服务端接入方式来看,即时通信采用TCP协议来保证可靠性,可能会建立多个连接,相比无连接的UDP传输方式,这是一种昂贵的传输方式。实时通信可以基于UDP协议,与服务端建立灵活的、快速的接入机制。
  • 存储方面,实时通信在服务端是实时转发,不会在服务端存储数据,而即时消息系统一般会将缓存转为存储数据,包括富媒体数据,会占用大量的存储空间,产生更多的存储成本。
  • 从成本上来看,传输同样信息量的数据,基于TCP的即时通信方式,更侧重于可靠性,会优先采用多线机房的传输方式,成本比较高;
  • 而基于UDP的实时通信方式,会优先选取最优路径进行传输数据,并可以动态调整传输路径,这样能够高效的利用带宽,提高传输效率,降低成本。

六、可用的解决方案

  • 即时通信:XMPP,MQTT
  • 实时通信:WebRTC、Tokbox

免费的im与rtc示例:https://github.com/starrtc/android-demo

即时通信(IM)和实时通信(RTC)的区别的更多相关文章

  1. QQ 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件

    QQ 编辑 腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件.腾讯QQ支持在线聊天.视频通话.点对点断点续传文件.共享文件.网络硬盘.自定义面板.QQ邮箱等多种功 ...

  2. (转)基于即时通信和LBS技术的位置感知服务(二):XMPP协议总结以及开源解决方案

    在<基于即时通信和LBS技术的位置感知服务(一):提出问题及解决方案>一文中,提到尝试使用XMPP协议来实现即时通信.本文将对XMPP协议框架以及相关的C/S架构进行介绍,协议的底层实现不 ...

  3. WEB即时通信

    问题 传统的浏览器通信方式:基于HTTP协议的请求/响应模式. 早期:通过刷新浏览器来更新服务器端的数据 后来Ajax(XMLHttpRequest是核心):可以不用刷新浏览器更新服务器端数据.但是这 ...

  4. WebSocket实现web即时通信(后端nodejs实现)

    WebSocket实现web即时通信 一.首先看一下,HTTP.ajax轮询.long poll和WebSocket的区别: 1.HTTP 协议(短连接):一个 Request 一个 Response ...

  5. WebSocket实现Web端即时通信

    前言 WebSocket 是HTML5开始提供的一种在浏览器和服务器间进行全双工通信的协议.目前很多没有使用WebSocket进行客户端服务端实时通信的web应用,大多使用设置规则时间的轮询,或者使用 ...

  6. 开发一个分布式IM(即时通信)系统!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 这知识学的,根本没有忘的快呀?! 是不是感觉很多资料,点收藏起来爽.看视频时候嗨.读 ...

  7. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  8. iOS开发之使用XMPPFramework实现即时通信(三)

    你看今天是(三)对吧,前面肯定有(一)和(二),在发表完iOS开发之使用XMPPFramework实现即时通信(一)和iOS开发之使用XMPPFramework实现即时通信(二)后有好多的小伙伴加我Q ...

  9. iOS开发之使用XMPPFramework实现即时通信(二)

    上篇的博客iOS开发之使用XMPPFramework实现即时通信(一)只是本篇的引子,本篇博客就给之前的微信加上即时通讯的功能,主要是对XMPPFramework的使用.本篇博客中用到了Spark做测 ...

随机推荐

  1. html与表格(table)相关的属性

    <table> 标签定义 HTML 表格.简单的 HTML 表格由 table 元素以及一个或多个 tr.th 或 td 元素组成.tr 元素定义表格行,th 元素定义表头,td 元素定义 ...

  2. php分享三十:php版本选择

    思考: cgi是怎么运行的?(是多线程?多进程?单线程?单进程?) fastcgi运行原理? apache运行php的原理? (是多进程还是多线程?) nginx是怎么运行php的? 什么是安全模式和 ...

  3. css遮罩层

    父元素:position:fixed; 让子元素居中对齐:position:absolute;top:0;bottom:0;left:0;right:0;margin:auto; <style& ...

  4. Xilinx Vivado的使用详细介绍(2):综合、实现、管脚分配、时钟设置、烧写

    前面一篇介绍了从新建工程一直到编写代码进行行为仿真,这篇继续进行介绍. 修改器件型号 新建工程时选择过器件型号,如果新建好工程后需要修改型号,可以选择菜单Tools - Project Setting ...

  5. [svc]java初步

    J2EE.J2SE 和 J2ME 三者的区别有哪些? J2SE, 主要是桌面软件开发,包括swing 等.是后面2个的基础,但是我们不用它做桌面开发.只学习语法. J2EE,网站开发,servlet. ...

  6. FLINK SQL Calcite原理

    http://wuchong.me/blog/2017/03/30/flink-internals-table-and-sql-api/ https://cloud.tencent.com/devel ...

  7. python TCP编程

    1.socket 服务端和客户端通过socket套接字进行通信 2.服务端 import socket import threading def tcp_handler(connect_sock, a ...

  8. ss安装

    安装很简单,如下: apt-get install python-pip pip install shadowsocks 配置文件格式如下: { "server":"0. ...

  9. LeetCode: Search in Rotated Sorted Array II 解题报告

    Search in Rotated Sorted Array II Follow up for "LeetCode: Search in Rotated Sorted Array 解题报告& ...

  10. mysql查询字段为null 返回0

    SELECT   IF(AVG(字段) IS NULL,0, 字段) as 重命名   From  xxx