美文网首页
Android XMPP实现即时通讯

Android XMPP实现即时通讯

作者: 惟吾德馨_慧 | 来源:发表于2019-05-16 11:00 被阅读0次

XMPP 一种基于标准通用标记语言的子集XML的协议,继承了在XML环境中灵活的发展性,XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。(from 百度)

XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSNICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。(from 百度)

XMPP实现即时通讯通过Openfire + Spark搭建服务器。原理:userA和userB通过聊天服务器作为中介发送和接收消息,消息的以Xml格式传输

连接服务器及回执 发送消息的xml数据 初始化聊天配置

openFire下载地址:http://www.igniterealtime.org/downloads/

登录连接,监听连接及消息

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本地搭建数据库保存历史聊天记录。当然,既然是自己的数据库了,在保存或取值是就可以随心所欲了。

③请求或消息重复发送。偶人会出现消息或者请求重复的情况,当用户编辑完消息点击发送,服务器有时会请求多次,导致对方接收多次。手机端需要限制发送消息的重复点击事件,避免同一消息发送多次;服务端设置请求不重复接收。

④异地登录。用户常常在多个手机登录同一个聊天账户,导致服务器茫然,消息发送不准确或消息到达目的地不当。

解决办法

第一步:手机端配置连接时将resoure统一设为“phone”,当用户在IOS或者Android同时登录时,聊天账号都能监听到异地登录。

统一设置登录源

第二步:需要在增加连接监听器(addConnectionListener)时,在重写的connectionClosedOnError()方法中,识别Exception中是否包含conflict,有则当前账号表为异地登陆,即断开当前连接,使得后来登录的手机端正常连接。

监听到异地登录

XMPP实现即时通讯通过Openfire + Spark搭建服务器,功能很强大,集成的方法很齐全,也提供了发送消息时增加自定义的节点方法,简单好用,但是缺点时在用户端和服务器交互偶尔出现的断连问题不好处理。

需要在正常连接状态下,消息进行握手,每条消息发给客户端,都需要客户端回复回执,否则一直保存在服务器,即客服端在每隔15s-60s发送一个message给服务器,服务器收到后回复一个callback,以此保证连接。如果服务器120s内没有收取到任何消息,那么close Session,断开连接。

上一篇:Android GreenDao数据库

下一篇:MVP+Okhttp3+Retrofit2+Rxjava2 框架初实现

惟吾德馨_慧 每天进步一点点 (2019-05-16)

相关文章

  • Android中实现自定义XMPP消息包收发

    在Android平台实现XMPP即时通讯主要是使用asmack这个包,asmack是XMPP协议的实现。但是asm...

  • XMPP的实现原理

    XMPP的实现原理 有没有做过即时通讯?是否使用过XMPP,讲述一下XMPP的实现原理 XMPP是一个即时通讯的协...

  • XMPP面试问题-1

    有没有做过即时通讯?是否使用过XMPP,讲述一下XMPP的实现原理 XMPP是一个即时通讯的协议,它规范了用于即时...

  • iOS基础--即时通讯的简单总结

    即时通讯是目前最为流行的通讯方式. 即时通讯的多种实现方式: XMPP,环信,融云. XMPP基于XML的点对点的...

  • 2018-07-26

    Android即时通讯四种协议之一 XMPP协议 1.Android即时通讯是什么? 大多数及时通讯协议已经超过了...

  • 即时通讯

    即时通讯 1.实现通讯功能 (1)即时通信可以用socket实现,成本肯定比较大 (2)使用xmpp实现即时通讯功...

  • Android XMPP实现即时通讯

    XMPP一种基于标准通用标记语言的子集XML的协议,继承了在XML环境中灵活的发展性,XMPP的前身是Jabber...

  • 即时通讯:XMPP项目实践-微聊

    即时通讯系列阅读 即时通讯基础 即时通讯:XMPP基础 即时通讯:XMPP项目实践-微聊 Smack类库最好的学习...

  • 即时通讯基础

    即时通讯系列阅读 即时通讯基础 即时通讯:XMPP基础 即时通讯:XMPP项目实践-微聊 Smack类库最好的学习...

  • 即时通讯:XMPP基础

    即时通讯系列阅读 即时通讯基础 即时通讯:XMPP基础 即时通讯:XMPP项目实践-微聊 Smack类库最好的学习...

网友评论

      本文标题:Android XMPP实现即时通讯

      本文链接:https://www.haomeiwen.com/subject/qphpaqtx.html