iOS - IM 即时通讯

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
云解析 DNS,旗舰版 1个月
简介: 1、即时通讯技术即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。即时通讯在开发中使用的场景有许多,如 AOL、Yahoo IM、MSN、QQ 以及微信等聊天软件,在电商 APP 集成买家与卖家的实时沟通等。

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 基本结构图

    IM1

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

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

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

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

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

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

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

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

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

2.3 XMPP 工作原理

  • 节点连接到服务器。

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

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

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

  • 节点之间进行交互。

    IM2

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 环信开发架构

  • 开发架构:

    IM4

  • 前提准备:

    • 注册成为环信开发者

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

    • 下载官方 SDK

    • 官方 开发文档

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

4、XMPP Openfire 服务器的搭建

5、XMPP 的使用

6、EaseMob 环信的使用

目录
相关文章
|
2月前
|
安全 前端开发 关系型数据库
IM即时通讯系统开发技术规则
IM即时通讯系统开发涵盖客户端与服务器端,涉及前端、后端、网络通信及多媒体处理等技术领域,支持文字、语音、图片、视频等多种实时交流方式。开发流程包括需求分析、技术选型、系统设计、开发实现、测试优化及部署维护等阶段,需关注网络通信、多媒体处理、安全性及可扩展性等关键技术点,广泛应用于社交、客服、团队协作及游戏等领域。
|
20天前
|
存储 网络协议 前端开发
基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.7版已发布
Android端主要更新内容: 1)[优化] 优化了首页“消息”列表中单聊类型未正确同步时的收发消息和点击后的处理逻辑; 2)[优化] 优化了首页“消息”列表中同一好友和陌生人会话不能自动合并的问题;
46 2
|
6天前
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v9.1版已发布
RainbowChat是一套基于开源IM聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题
22 5
|
2月前
|
移动开发 前端开发 JavaScript
开源即时通讯IM框架MobileIMSDK的H5端技术概览
开源即时通讯IM框架MobileIMSDK的H5端技术概览
56 2
开源即时通讯IM框架MobileIMSDK的H5端技术概览
|
3月前
|
前端开发 网络协议
Netty实战巅峰:从零构建高性能IM即时通讯系统,解锁并发通信新境界
【8月更文挑战第3天】Netty是一款高性能、异步事件驱动的网络框架,适用于开发高并发网络应用,如即时通讯(IM)系统。本文将指导你利用Netty从零构建高性能IM程序,介绍Netty基础及服务器/客户端设计。服务器端使用`ServerBootstrap`启动,客户端通过`Bootstrap`连接服务器。示例展示了简单的服务器启动过程。通过深入学习,可进一步实现用户认证等功能,打造出更完善的IM系统。
113 1
|
3月前
|
编解码 NoSQL Redis
(十一)Netty实战篇:基于Netty框架打造一款高性能的IM即时通讯程序
关于Netty网络框架的内容,前面已经讲了两个章节,但总归来说难以真正掌握,毕竟只是对其中一个个组件进行讲解,很难让诸位将其串起来形成一条线,所以本章中则会结合实战案例,对Netty进行更深层次的学习与掌握,实战案例也并不难,一个非常朴素的IM聊天程序。
|
4月前
|
开发工具 开发者
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(二)
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(二)
67 0
|
4月前
|
JSON 安全 应用服务中间件
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(一)
【使用必读】服务端集成网易云信IM 即时通讯-回调说明篇(一)
71 0
|
4月前
|
安全 Java API
【新手必看】服务端集成网易云信IM 即时通讯
【新手必看】服务端集成网易云信IM 即时通讯
94 0
|
6月前
|
移动开发 网络协议 Java
即时通讯技术文集(第38期):IM代码入门实践(Part2) [共15篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第38 期。
70 1