1、即时通讯技术

  • 即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。

  • 即时通讯在开发中使用的场景有许多,如 AOL、Yahoo IM、MSN、QQ 以及微信等聊天软件,在电商 APP 集成买家与卖家的实时沟通等。它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议,协议是用来说明信息在网络上如何传输。

  • 如果有了统一的传输协议,那么应当可以实现各个 IM 之间的直接通讯,为了创建即时通讯的统一标准,人们多次努力,试图统一各大主要 IM 供应商的标准(AOL、Yahoo 及 Microsoft),但无一成功,且每一种 IM 仍然继续使用自己所拥有的协议。目前已经出现过的 IM 协议包括:

    • SIP :IETF 的对话初始协议,是建立 VOIP 连接的 IETF 标准,而 VOIP 就是网络电话。
    • SIMPLE:即时通讯对话初始协议和表示扩展协议。
    • APEX :应用交换协议。
    • PRIM :显示和即时通讯协议。
    • XMPP :基于 XML 且开放的可扩展通讯和表示协议,常称为 Jabber 协议。
  • 当前实现即时通讯的方案:

    • XMPP :可扩展通讯和表示协议。
    • EaseMob:环信,提供即时通信的一个第三平台,是在 XMPP 的基础上进行的二次开发。

2、XMPP

2.1 XMPP 简介

  • 1、XMPP 诞生的由来

    • 设计一款全世界都使用的即时通讯协议,无论使用什么即时通讯软件,都可以互联互通。
  • 2、XMPP 起源

    • 最初 XMPP 作为一个框架开发,目标是支持企业环境内的即时消息传递和联机状态应用程序。

    • XMPP 的前身是 Jabber(1998 年),是一个开源组织定义的网络即时通信协议。

    • XMPP 是一个分散型通信网络,这意味着,只要网络基础设施允许,任何 XMPP 用户都可以向其他任何 XMPP 用户传递消息。

    • 多个 XMPP 服务器也可以通过一个专门的 “服务器-服务器” 协议相互通信,提供了创建分散型社交网络和协作框架的可能性。

    • XMPP 协议曾经是 Google 力推的即时通信协议,其代表作品是 GTalk。

  • 3、XMPP 概述

    • XMPP:The Extensible Messaging and Presence Protocol,可扩展通讯和表示协议,是一种基于 XML 的即时通讯协议,用于即时消息以及在线现场探测。

      • 它继承了在 XML(可扩展标记语言)环境中灵活的发展性,这表明 XMPP 是可扩展的。
    • XMPP 规范了用于即时通信在网络上的数据传输格式,它的核心是 XML 流传输协议的定义,可用于服务类实时通讯、表示和需求,响应服务中的 XML 数据元流式传输。

      • 使得 XMPP 能够在一个比以往网络通信协议更规范的平台上。借助于 XML 易于解析和阅读的特性,使得 XMPP 的协议能够非常漂亮。

      • XMPP 包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配置好的系统添加功能。

      • 促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。

    • XMPP 是一个典型的 C/S 架构,基本的网络形式是客户端通过 TCP/IP 连接到服务器,通过 Socket 建立连接(目的是为了保持长连接),然后在之上传输 XML 流。

    • XMPP 以 Jabber 协议为基础,而 Jabber 是即时通讯中常用的开放式协议。

    • XMPP 的技术规格已被定义在 RFC 3920RFC 3921,文档定义了登录,退出,获取好友,发送消息等等的 XML 数据传输协议。

    • XMPP 的扩展协议 Jingle 使得其支持语音和视频,目前 iOS 尚不支持。

2.2 XMPP 基本结构

  • C/S 和 P2P 基本结构图

  • XMPP 是一个典型的 C/S 架构。

    • 而不是像大多数即时通讯软件一样,使用 P2P 客户端到客户端的架构。

    • 也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器传递的。

    • 优点:采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行。

  • XMPP 中定义了三个角色:客户端,服务器,网关。

    • 通信能够在这三者的任意两个之间双向发生。

    • 服务器:同时承担了客户端信息记录,连接管理和信息的路由功能。

    • 网关:承担着与异构即时通信系统的互联互通,异构系统可以包括 SMS(短信),MSN,ICQ 等。

    • 基本的网络形式,单客户端通过 TCP/IP 连接到单服务器,然后在之上传输 XML 流。

2.3 XMPP 工作原理

  • 节点连接到服务器。

  • 服务器利用本地目录系统中的证书对其认证。

  • 节点指定目标地址,让服务器告知目标状态。

  • 服务器查找、连接并进行相互认证。

  • 节点之间进行交互。

2.4 XMPP 传输内容

  • XMPP 应用传输的是与即时通讯相关的指令。

    • XMPP 传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了 XML 格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。

    • XMPP 的核心部分就是一个在网络上分片段发送 XML 的流协议。这个流协议是 XMPP 的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议,可以说 XMPP 用 TCP 传的是 XML 流。

  • XMPP 是一种类似于 HTTP 协议的一种数据传输协议。

    • 其过程就如同 “解包装 --> 包装” 的过程,只需要理解其接收的类型及返回的类型,便可以很好的利用 XMPP 来进行数据通讯。
  • XMPP 核心文件是基于 TCP 的 XML 流的传输,XMPPFrame 框架是通过代理的方式实现消息传递的。

  • XMPP 客户端获取到服务器发送过来的好友消息,客户端需要对 XML 进行解析,使用的解析框架的 KissXML 框架,而不是 NSXMLParser/GDataXML。

  • 为了简化开发,XMPP 的引用程序通常会将 XMPPStream 放置在 AppDelegate 中,以便于全局访问。

2.5 XMPP JID

  • 每个 XMPP 客户端用户必须拥有一个全局惟一标识符。

    • 基于历史原因,这些标识符称为 Jabber ID 或 JID。鉴于协议的分布式特征,JID 应包含联系用户所需的所有信息,JID 的结构类似于电子邮件地址,但不要求 JID 同时也是有效的电子邮件收件人。
  • 客户端和服务器节点,被统称为 XMPP 实体,都拥有 JID。例如:SomeCorp 公司的员工 John Doe 可能拥有 JID:用户名@服务器名称

    • John.Doe@somecorp.com,其中 somecorp.com 是 SomeCorp 公司的 XMPP 服务器的地址,John.Doe 是 John Doe 的用户名。

2.6 XMPP 的优缺点

  • 1、优点

    • 开放:XMPP 协议是自由,开放,公开的,并且易于了解。而且在客户端,服务器,组件,源码库等方面都已经各自有多种实现。
    • 标准:互联网工程工作小组(IETF)已经将 Jabber 的核心 XML 流协议以 XMPP 之名,正式列为认可的实时通信及 Presence 技术。而 XMPP 的技术规格已被定义在 RFC 3920 及 RFC 3921。任何 IM 供应商在遵循 XMPP 协议下,都可与 Google Talk 实现连接。
    • 证实可用:第一个 Jabber(现在 XMPP)技术是 Jeremie Miller 在 1998 年开发的,现在已经相当稳定,数以百计的开发者为 XMPP 技术而努力。今日的互联网上有数以万计的 XMPP 服务器运作著,并有数以百万计的人们使用 XMPP 实时传讯软件。
    • 分布式:XMPP 网络的架构和电子邮件十分相像。XMPP 核心协议通信方式是先创建一个 stream,XMPP 以 TCP 传递 XML 数据流,没有中央主服务器。任何人都可以运行自己的 XMPP 服务器,使个人及组织能够掌控他们的实时传讯体验。
    • 安全:任何 XMPP 协议的服务器可以独立于公众 XMPP 网络(例如在企业内部网络中),而使用 SASL 及 TLS 等技术的可靠安全性,已自带于核心 XMPP 技术规格中。
    • 可扩展:XML 命名空间的威力可使任何人在核心协议的基础上建造客制化的功能。为了维持通透性,常见的扩展由 XMPPStandards Foundation。
    • 弹性佳:XMPP 除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
    • 多样性:用 XMPP 协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各种领域。用 XMPP 技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被 “绑架” 的困境。
  • 2、缺点

    • 数据负载太重:随着通常超过 70% 的 XMPP 协议的服务器的数据流量的存在和近 60% 的被重复转发,XMPP 协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。
    • 没有二进制数据传输:XMPP 协议的方式被编码为一个单一的长的 XML 文件,因此无法提供修改二进制数据。因此, 文件传输协议一样使用外部的 HTTP。如果不可避免,XMPP 协议还提供了带编码的文件传输的所有数据使用的 Base64。至于其他二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。

2.7 XMPP 开发架构

3、EaseMob 环信

3.1 环信简介

  • 环信是一个第三平台,提供即时通信(IM:Instant Messaging)的服务。

  • 环信使用的是 XMPP 协议,它是在 XMPP 的基础上进行的二次开发,对服务器 Openfire 和客户端进行功能模型的添加和客户端 SDK 的封装。

  • 环信的本质还是使用 XMPP,基于 Socket 的网络通信,在网络上传输的数据也是 XML。

  • 环信内部实现了数据缓存,会把聊天记录添加到数据库,把附件(如音频文件,图片文件)下载到本地,使程序员更多时间是花到用户即时体验上。

  • 环信内部已经实现了视频,音频,图片,其它附件发送功能。

  • 环信使用公司可以节约时间成本,不需要公司内部搭建服务器,环信日活动量在 30 万以下,永远免费。

  • 客户端的开发,使用环信 SDK 比使用 XMPPFramework 更简洁方便。

  • 公司如要开发即时通讯软件,建议首选环信,环信占用市场份额较大。

3.2 环信开发架构

  • 开发架构:

  • 前提准备:

    • 注册成为环信开发者

    • 在开发者后台创建 APP 获取 Key。

    • 下载官方 SDK

    • 官方 开发文档

    • 根据官网导入 SDK 和相应依赖,初始化应用。

4、XMPP Openfire 服务器的搭建

5、XMPP 的使用

6、EaseMob 环信的使用

iOS - IM 即时通讯的更多相关文章

  1. iOS开发--即时通讯常用第三方库

    前言 自毕业到现在,从事iOS即时通讯开发已经1年半之久.主要负责Allure开发,目前已上架,可以在苹果商店搜素Allure.Allure模仿微信的交互和设计效果,已经实现微信的大部分功能. 在这里 ...

  2. iOS之即时通讯相关理解

    Socket: 1>Socket又称"套接字" 2>网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 3>应用程序通常通 ...

  3. iOS开发--即时通讯

    什么是环信? 1.环信是一个第三平台,提供即时通信(IM–Instant Messaging )的服务 2.环信是在XMPP的基础上进行二次开发 3.环信在网络上传输的数据也是XML 4.使用环信,不 ...

  4. 【原创】轻量级移动端即时通讯技术 MobileIMSDK 发布了

    申明:MobileIMSDK目前为个人原创开源工程,投入了大量的时间和精力,希望对需要的人有所帮助.如需与作者交流,见文章底部个人签名处,互相学习.Q群:215891622,欢迎共同志趣者学习和交流. ...

  5. iOS:融云即时通讯快速集成

    一.介绍 即时通讯在众多社交软件.生活软件以及教育软件中已经是必备的功能了,在当前国内,即时通讯SDK做的比较不错的有那么几家,例如环信SDK.融云SDK...,这两家做的都很不错,各有千秋吧,要是真 ...

  6. iOS开发融云即时通讯集成详细步骤

    1.融云即时通讯iOS SDK下载地址   http://rongcloud.cn/downloads  选择iOS   SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注 ...

  7. iOS开发之即时通讯之Socket(AsyncSocket)

    1.AsyncSocket介绍 如果需要在项目中像QQ微信一样做到即时通讯,必须使用socket通讯. iOS中Socket编程的方式: BSD Socket: BSD Socket 是UNIX系统中 ...

  8. iOS 即时通讯 + 仿微信聊天框架 + 源码

    这些你造吗? 即时通讯(IM),在IOS这片江湖里面已经算是一个老者了,我这小旋风也是在很早以前巡山的时候,就知道有即时通讯这个妖怪,以前也多多少少接触过一些,在造APP的时候用过,哎呀,说着说着就感 ...

  9. [iOS]从零开始开发一个即时通讯APP

    前言 这是我的毕业设计.刚开始确定这个课题的时候是因为以前有稍微研究过一些XMPP协议,在这个基础上做起来应该不难.然后开始选技术的时候还有半年,我想为什么不从更底层做起呢!那就不用XMPP,当时接触 ...

随机推荐

  1. Spring整合JMS(一)-基础篇

    1.基础知识 图1   同步通信和异步通信通信过程示意图 RMI使用的是同步通信,JMS使用的是异步通信.从图1可以看出异步通信的好处就是减少了不必要的等待,提高了效率. JMS中有两个主要的概念:消 ...

  2. 三栏布局,div左右盒子是定宽,中间是自适应

    用弹性布局flex: 给父盒子加个display:flex; 给中间盒子设flex=1; /* 弹性盒子布局*/ .wrap{ width: 100%; height: 90px; display: ...

  3. BZOJ 2502: 清理雪道 [最小流]

    2502: 清理雪道 题意:任意点出发任意次每条边至少经过一次最小花费. 下界1,裸最小流.... #include <iostream> #include <cstdio> ...

  4. BZOJ 1202: [HNOI2005]狡猾的商人 [带权并查集]

    题意: 给出m个区间和,询问是否有区间和和之前给出的矛盾 NOIp之前做过hdu3038..... 带权并查集维护到根的权值和,向左合并 #include <iostream> #incl ...

  5. BZOJ 3879: SvT [虚树 后缀树]

    传送门 题意: 多次询问,给出一些后缀,求两两之间$LCP$之和 哈哈哈哈哈哈哈竟然$1A$了,刚才还在想如果写不好这道题下节数学就不上了,看来是上天让我上数学课啊 $Suffix\ Virtual\ ...

  6. testlink用例的导出到Excel

    一直在网上寻找怎么把testlink的用例导出到Excel中,以及把Excel中已经写好的用例导入到Testlink中的方法.根据现网的经验,然后修改了一下.贴出来,以飨有这方面需求的测试同仁. Te ...

  7. Access denied for user 'root'@'localhost' (using password: YES)的解决

    今天使用phpmyadmin登录远程数据库所以改了一些配置,结果回过头来登录本地mysql时来了一句mysql Access denied for user 'root'@'localhost' (u ...

  8. 页面刷新方式实时检测cookie是否失效

    在浏览器端每隔10秒钟刷新一次页面,可用于检查cookie值是否失效. 在study.php文件中存在这样一条语句: <meta http-equiv="refresh" c ...

  9. PHP的 first day of 和 last day of

    话不多说,先上代码(当前是2017年6月2日) echo date("Y-m-d", strtotime("2017-02 first day of")).'& ...

  10. go get报错unrecognized import path “golang.org/x/net/context”…

    今天安装gin框架,首先下载gin,命令如下:go get github.com/mattn/go-sqlite3 结果报错: package golang.org/x/net/context: un ...