以前写即时通讯的时候总是利用第三方环信去实现,当然这也是最直接最便捷的方法。不过最近闲来无事所以想了解下底层的socket如何和xmpp关联到底如何实现的呢?探索之路,有错必纠!!!
利用环信方法:
首先介绍XMPPFramework环境配置:
XMPPFramework是一个OS X/iOS平台的开源项目,使用Objective-C实现了XMPP协议(RFC-3920),同时还提供了用于读写XML的工具,大大简化了基于XMPP的通信应用的开发。
XMPP的地址叫做JabberID(简写为JID),它用来标示XMPP网络中的各个XMPP实体。JID由三部分组成:domain,node identifier和resource。JID中domain是必不可少的部分。注意:domain和user部分是不分大小写的,但是resource区分大小写。
XMPP通信原语有3种:message、presence和iq。
1、message message是一种基本推送消息方法,它不要求响应。主要用于IM、groupChat、alert和notification之类的应用中。 主要 属性如下: 1)、type属性,它主要有5种类型:
normal:类似于email,主要特点是不要求响应;
chat:类似于qq里的好友即时聊天,主要特点是实时通讯;
groupchat:类似于聊天室里的群聊;
headline:用于发送alert和notification;
error:如果发送message出错,发现错误的实体会用这个类别来通知发送者出错了;
2)、to属性:标识消息的接收方。 3)、from属性:指发送方的名字或标示。为防止地址外泄,这个地址通常由发送者的server填写,而不是发送者。 2、presence presence用来表明用户的状态,如:online、away、dnd(请勿打扰)等。当改变自己的状态时,就会在stream的上下文中插入一个Presence元素,来表明自身的状态。要想接受presence消息,必须经过一个叫做presence subscription的授权过程。 3、iq(Info Query) 一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行响应。例如,client在stream的上下文中插入一个元素,向Server请求得到自己的好友列表,Server返回一个,里面是请求的结果。
主要的属性是type。包括:
Get :获取当前域值。类似于http get方法。
Set :设置或替换get查询的值。类似于http put方法。
Result :说明成功的响应了先前的查询。类似于http状态码200。
Error: 查询和响应中出现的错误。
二、开发环境配置 主要用到的工具软件有Openfire,mysql,jdk,Navicat,spark等,这些在网上都可以下载到。接下来就可以安装了: 第一步:安装jdk 一步一步点击就可以了。 第二步,安装mysql。 都安装好之后,会在偏好设置里面看到以下三个:
openfire 是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。 Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。