XMPP 一种基于标准通用标记语言的子集XML的协议,继承了在XML环境中灵活的发展性,XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。(from 百度)
XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。(from 百度)
XMPP实现即时通讯通过Openfire + Spark搭建服务器。原理:userA和userB通过聊天服务器作为中介发送和接收消息,消息的以Xml格式传输
连接服务器及回执
发送消息的xml数据
初始化聊天配置
登录连接,监听连接及消息
conn.addConnectionListener(new ConnectionListener()); //监听连接
Roster好友花名册
roster.addRosterListener(new RosterListener()); //监听好友请求
roster.createEntry(friendJID, null, null); //申请加为好友
同意加为好友
拒绝加为好友
ChatManager消息管理器
chatManager.addChatListener(new ChatManagerListener());//消息监听器,用于监听接收到的消息,消息以Xml格式,使用Xml解析
发送消息
技术难点
①连接的保活。在手机端需要不断监听与服务器的连接,偶然情况会因为进程被无意杀掉,导致消息未能及时保存,在重启APP时出现消息漏收情况,这时候当APP运行作为后台进程运行时,登录状态设为离线,待下次重启APP时可接受到离线消息。
②消息的保存。因为是小作坊搭建的聊天服务器,在消息保存这一块没有做完善,因而聊天的历史纪录需要在APP本地搭建数据库保存历史聊天记录。当然,既然是

本文介绍了XMPP协议在即时通讯中的应用,包括其角色定义、基本网络形式和Openfire+Spark的服务器搭建。还讨论了连接保活、消息保存、重复发送等问题及其解决方案,并提到了哇谷IM在即时通讯领域的服务和产品。
1万+

被折叠的 条评论
为什么被折叠?



