iOS 开发 XMPP即时通讯项目开发(仿微信)-详解之XMPP入门

1.即时通信(Instant Message /IM)的含义

即时通信软件发展

产品最早的创始人是三个以色列青年,是他们在1996年做出来的,取名叫ICQ。

1998年当ICQ注册用户数达到1200万时,被AOL看中,以2.87亿美元的天价买走。ICQ有1亿多用户,主要市场在美洲和欧洲,已成为世界上最大的即时通信系统。

即时通讯技术(IM – Instant Messaging)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容

有许多的IM系统,如AOL、Yahoo IM、 MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议

协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已经出现过的IM协议包括:IETF的对话初始协议(SIP)和即时通讯对话初始协议和表示扩展协议(SIMPLE)、应用交换协议(APEX)、显示和即时通讯协议(PRIM)及基于XML且开放的可扩展通讯和表示协议(XMPP)协议(常称为 Jabber 协议)

人们多次努力,试图统一各大主要IM供应商的标准(AOL、Yahoo 及 Microsoft),但无一成功,且每一种IM仍然继续使用自己所拥有的协议

XMPP起源

XMPP是基于XML的协议,用于即时消息(IM)以及在线现场探测。最初,XMPP作为一个框架开发,目标是支持企业环境内的即时消息传递和联机状态应用程序。 XMPP前身是Jabber(1998年),是一个开源组织定义的网络即时通信协议

XMPP是一个分散型通信网络,这意味着,只要网络基础设施允许,任何XMPP用户都可以向其他任何XMPP用户传递消息。多个XMPP服务器也可以通过一个专门的“服务器-服务器”协议相互通信,提供了创建分散型社交网络和协作框架的可能性

尽管XMPP的出现是为了满足“个人-个人”即时消息传递的要求,但它完全不必局限于此任务 XMPP概述 XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。这表明XMPP是可扩展的。可以通过发送扩展的信息来处理用户的需求,以及在 XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配置好的系统添加功能 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性 XMPP的扩展协议Jingle使得其支持语音和视频,目前iOS尚不支持 XMPP的官方文档是RFC 3920 XMPP协议曾经是Google力推的即时通信协议,其代表作品是GTalk

XMPP定义

XMPP:The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议)

XMPP可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中常用的开放式协议

XMPP是基于XML的协议,用于即时消息(IM)以及在线现场探测。促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同

XMPP工作原理

节点连接到服务器 服务器利用本地目录系统中的证书对其认证 节点指定目标地址,让服务器告知目标状态 服务器查找、连接并进行相互认证 节点之间进行交互

QQ,MSN,GoogleTalk,AIM,Jabber(XMPP别名),百度hi,网易泡泡,盛大圈圈,淘宝旺旺,易信,iChat等等。 QQ的前身OICQ在1999年2月第一次推出,几乎接近垄断中国在线即时通讯软件市场。 百度Hi具备文字消息、音视频通话、文件传输等功能,您可通过它找到志同道合的朋友,并随时与好友联络感情; 另一类是企业用IM,简称EIM,如:E话通,UC,EC企业即时通信软件,UcSTAR、商务通等

即时通信中除了基本信息,特殊指令如何传输?

即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行符的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。

2.XMPP入门

  • XMPP :Extensible Messaging and Presence Protocol,以Jabber协议(XMPP协议前身)为基础 XMPP协议基于可扩展标记语言XML,建立TPC/IP连接,完成C/S、C/C、S/S之间的数据传输。XMPP是一个消息传输国际化标准协议。 XMPP官网:http://xmpp.org XMPP官方中文wiki:Jabber/XMPP中文翻译计划

四个概念

  • XMPP服务器(不需要我们自己写)
    XMPP客户端(iOS android win)
    XMPP协议
    XMPPFramework(三方框架)

  • 经典服务器端Openfire

OpenFire是由JiveSoftware推出的一款经典XMPP Server,用Java编写,并且开源。OpenFire由XMPPServer+JavaWebServer(嵌入式jetty容器)组成,前者基于XMPP协议进行通信,后者是一个Web管理后台(HTTP/HTTPS). Openfire基于MINA框架,MINA框架是Java体系中目前应用非常广泛的一个通信框架。 MINA基于NIO,前身是Netty2,Netty2的架构不是很好,由Trustin Lee在2004年重写并改名为MINA。 NIO自JAVA 1.4之后加入JDK中,其核心内容便是非阻塞的,高性能的底层IO。换言之JDK 4之前的IO阻塞问题需要开发者自行解决。
Openfire的数据库选择

  • OpenFire是server端,因此数据库一般来说用C/S型DBMS比较好(SQLServer,MySQL,Oracle等),为了良好的并发性能,基本上不考虑SQLite这种嵌入式数据库(OpenFire的实现中也没有这个选项)。

  • 外接数据库:如果OpenFire使用的数据库是独立的数据库服务器,那么这个配置过程叫做数据库外接,数据库外接可以让Openfire的数据库表写入一个已经存在的数据库中,方便我们做数据同步。

  • 内置数据库:偶尔也会使用Openfire内置的数据库(PostgreSQL),Openfire称之为嵌入式数据库,但是不代表PostgreSQL是一款像SQLite的嵌入式数据库,PostgreSQL仍然是一款C/S架构的DBMS,只不过Openfire将其源码附加在自己的安装包中可以直接使用而已。

Openfire的安装

如果需要卸载MySQL,先停止MySQL服务在执行清理脚本,否则会出现问题

  • 先准备好数据库,如果是外接数据库,需要先在对应的数据库中准备好相应的Schema,例如:
 CREATE SCHEMA HMOpenFire;CREATE DATABASE HMOpenFire;
  • 在MySQL中以上两句SQL效果一样。

  • 如果使用的是MySQL数据库,提前配置好schema的字符集为UTF8,因为MySQL的默认字符集是拉丁文,如果稍微不注意可能以后不方便保存中文。

  • 安装好Openfire

  • 安装好之后,访问localhost:9090 配置本地域,管理员账户,端口等一些简单配置。这些配置都可以通过XML配置文件修改。

  • 配置正确的数据库连接URL java中的数据库连接为jdbc,java中直接连接数据库与jdbc-odbc桥有所不同,jdbc不需要配置数据源,只需要加载对应数据库的jdbc驱动即可。这些驱动已经附加在openfire安装包中,我们只需要选择即可。 而URL需要自己配置,例如mysql的数据库连接url为: jdbc:mysql://host:port/dbname?key1=value1&key2=value2…. 常见参数:(openfire有单独处理用户名和密码,不必写入url)

user 用户名
password 密码
autoReconnect 联机失败,是否重新联机(true/false)
maxReconnect 尝试重新联机次数
initialTimeout 尝试重新联机间隔
maxRows 传回最大行数
useUnicode 是否使用Unicode字体编码(true/false)
characterEncoding 何种编码(GB2312/UTF-8/…)
relaxAutocommit 是否自动提交(true/false)
capitalizeTypeNames 数据定义的名称以大写表示
  • 结束openfire的配置,进入对应的数据库schema,检查openfire的系统表是否建表成功,以及初始数据是否插入成功,如果没问题就可以开始使用。
  • -

使用 信息App 或者 Spark 等尝试登陆我们的OpenFire服务器进行聊天

  1. 由于MacOS自带的信息App支持Jabber协议,比较方便我们测试服务器的功能是否正常。当然JiveSoftware提供的Spark也能登陆我们的服务器,只不过这个软件需要相应的JAVA环境才可以运行(JDK)。

  2. 登陆时,如果本地域可以被正确解析为server的IP地址,那么无需单独配置IP。反之需要填写IP地址。默认的端口为5222

  3. 登陆完成后,进入9090后台,查看会话列表,观察我们的上下线状态。

导入XMPPFramework-iOS框架进行我们自己的客户端编写

1. 在Build Setting 搜索Header Search Paths 添加头文件搜索路径:/usr/include/libxml2
2. 在Build Phasses  添加2个动态链接库:libxml2.dylib  libresolve.dylib
3. 在Build Setting 搜索prefix 在Prefix Header中添加$SRCROOT/$(PRODUCT_NAME)/PrefixHeader.pch 添加pch文件,导入UIKit
4. build成功

3. 框架初步认识


iOS 开发 XMPP即时通讯项目开发(仿微信)-详解之XMPP入门相关推荐

  1. Android-IM从零开始开发一个即时通讯项目

    Android-IM从零开始开发一个即时通讯项目 https://www.jianshu.com/p/dca480006691 关于聊天室项目 聊天室项目,也被称为即时通讯(IM). 其原理是服务器是 ...

  2. Vue项目supermall仿蘑菇街详解(一)首页开发详解

    前言 本文章是对coderwhy vue项目仿蘑菇街做的一个步骤详解,此文章包含个人详解及主要步骤,由于代码较多较杂,就不放这了,代码大部分就用截图了 一.安装及创建 安装node,vue-cli,创 ...

  3. 全开源即时通讯(IM)系统-仿微信

    1. 什么是E聊SDK E聊是一套面向个人的免费开源通用的即时通讯组件,支持发送红包,推送商品信息等.SDK能够更加容易地赋予客户IM能力,使客户可以快速的在自有产品上添加聊天功能.使用E聊SDK可以 ...

  4. 即时通讯im聊天仿v信聊呗闲聊潮信该有的功能都有ios安卓web端

    即时通讯im聊天仿v信聊呗闲聊潮信该有的功能都有ios安卓web端 App特色说明 经过测试.好用的,无BUG. 这个直接就可以运营了.聊天通信流畅. 推荐服务器配置:4核4G带宽5M 网盘下载地址: ...

  5. linux+即时通讯服务器,linux平台上的即时通讯应用开发

    由于使用习惯,Linux在中国受欢迎程度远不如windows,相应的软件也比较少,尤其是音视频类的软件,但是,这并不代表就完全没有.下面介绍一款强大的音视频即时通讯平台给大家,它就是--Anychat ...

  6. 基于Android开发的即时通讯聊天app

    基于Android开发的即时通讯聊天app 前言 即时通讯(Instant Messaging,简称IM)在互联网中应用十分广泛,它可以和很多的领域结合,发挥十分重要的作用.比如金融行业的支付宝.各大 ...

  7. Android基于环信开发的即时通讯APP

    Android基于环信开发的即时通讯APP,源代码在Github上,GitHub地址为:https://github.com/PowerDos/BLChat ,希望能够帮到你们,下面是系统简介. 简介 ...

  8. 即时通讯音视频开发(十):实时语音通讯的回音消除技术详解

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关实时 ...

  9. IM即时通讯项目讲解(一) 实现类似qq微信表情面板无缝切换

    IM即时通讯项目讲解(一)--实现类似qq微信表情面板无缝切换 标签(空格分隔): 开源项目 ###该系列技术课程来源慕课IM实战 带后台的IM即时通讯App 全程MVP手把手打造 #####通过该课 ...

  10. 即时通讯项目 java版本qq (含服务器和客户端)源码_即时通讯安卓-QQ互联网和即时通讯云,如何实现即时通讯,这是Android还是Java...

    Android是系统平台. 应用程序所做的是应用程序的开发和完成 也就是说,通信是网络通信,但在手机环境中,网络的情况更复杂,所以我们必须做好结构 安卓即时通讯. 怎么做?安卓版TT即时通讯排行. A ...

最新文章

  1. java基础-static
  2. Deepfake技术实现秒速换脸!!!
  3. Firefox 66正式向广告宣战!预设禁止自动播放影片并加入加入 Windows Hello
  4. 07-函数作用域和集合列表字典元祖
  5. springboot+springsecurity+mybatis plus注解实现对方法的权限处理
  6. [詹兴致矩阵论习题参考解答]习题7.1
  7. 《Windows核心编程》学习笔记(9)– 在win7或者vista系统下提升一个进程的运行权限...
  8. 关于图连通性的几道题(水)
  9. K8S环境中NAS卷添加noresvport方法
  10. ES6语法---let和var的不同
  11. 5.1作业5 四则运算 测试与封装
  12. JDK使用VolatileImage可以有效改进刷屏
  13. 【智慧工厂】一篇让你搞明白ERP、SAP、MES的文章
  14. 估计算法类有哪些最新发表的毕业论文呢?
  15. PLSQL使用text import导入数据
  16. w ndows10更新后变成32位了,三种直接从 Win7 升级到 Win10 的方法
  17. (1) 创建一个Customer ,名字叫 Jane Smith, 他有一个账号为1000,余额为2000元,年利率为 1.23% 的账户。 (2) 对Jane Smith操作。 存入 100 元,再
  18. 今日头条、抖音创始人张一鸣
  19. java8历史版本下载地址
  20. 创建vue-ssr项目

热门文章

  1. 蓝桥杯_Fibonacci数列(Java)
  2. PID控制算法的c语言实现 附录2 直流电机PWM调速系统中控制电压非线性研究
  3. 携号转网实时手机号归属地查询接口API
  4. 有哪些值得推荐的PS(Adobe Photoshop)插件?
  5. 【两步稀疏表示法】基于两步稀疏表示法的小波变换的图像重建算法的MATLAB仿真
  6. java获取.py文件值_Java File文件处理 读文件
  7. 2021年危险化学品生产单位安全生产管理人员试题及解析及危险化学品生产单位安全生产管理人员模拟试题
  8. Hibernate 下载、安装和使用
  9. UML--构件图详解
  10. rubyinstaller官网无法访问的解决办法