
Smack+OpenFire搭建IM通信,包含心跳和自动重连(Android实现)
发布日期:2022-03-30 18:18:25
浏览次数:18
分类:博客文章
本文共 2948 字,大约阅读时间需要 9 分钟。
Smack是一个开源,易于使用的XMPP(jabber)客户端类库。优点:简单的,功能强大,给用户发送信息只需三行代码便可完成。缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大。
OpenFire是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。 Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
1、首先到网址 http://www.igniterealtime.org 下载OpenFire服务器和Smack jar包
2、安装OpenFire登陆到控制台
这里设置多长时间关闭闲置连接,可以判断用户是否在线的最长反应时间
3、创建两个测试账号,先用Spark登陆一个账号
4、手机端登陆,使用Service保持连接,并与spark端发送消息,实现双向通信(代码和程序在后面)
5、关键代码
配置连接OpenFire服务器,连接成功后设置响应Linstener和Receiver,这里因业务需求设置ping间隔为10s
1
public void connect() { 2
Log.i(TAG, "connect()"); 3
XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder(); 4
configBuilder.setHost(SmackConst.XMPP_HOST); 5
configBuilder.setServiceName(SmackConst.SERVICE_NAME); 6
configBuilder.setUsernameAndPassword(mUsername, mPassword); 7
configBuilder.setSecurityMode(SecurityMode.disabled); 8
mConnection = new XMPPTCPConnection(configBuilder.build()); 9
//Set ConnectionListener here to catch initial connect();10
mConnection.addConnectionListener(this);11
try {12
mConnection.connect();13
mConnection.login();14
if(mConnection.isAuthenticated()){//登录成功15
MyPingManager.setDefaultPingInterval(10);//Ping every 10 seconds16
MyPingManager myPingManager = MyPingManager.getInstanceFor(mConnection);17
//Set PingListener here to catch connect status18
myPingManager.registerPingFailedListener(SmackConnection.this);19
setupSendMessageReceiver();20
//Set ChatListener here to catch receive message and send NEW_MESSAGE broadcast21
ChatManager.getInstanceFor(mConnection).addChatListener(this);22
//Set ChatListener here to catch roster change and rebuildRoster23
//Roster.getInstanceFor(mConnection).addRosterListener(this);24
sendLoginBroadcast(true);25
}else{26
mConnection.disconnect();27
Log.i(TAG, "Authentication failure");28
sendLoginBroadcast(false);29
}30
} catch (Exception e) {31
e.printStackTrace();32
sendLoginBroadcast(false);33
Intent intent = new Intent(mService, mService.getClass());34
mService.stopService(intent);35
}36 37
}
自动重连TimerTask,Ping失败后启动,重连成功后关闭
1
private Timer reConnectTimer; 2
private int delay = 10000; 3
//pingFailed时启动重连线程 4
class ReConnectTimer extends TimerTask { 5
@Override 6
public void run() { 7
// 无网络连接时,直接返回 8
if (getNetworkState(mService) == NETWORN_NONE) { 9
Log.i(TAG, "无网络连接,"+delay/1000+"s后重新连接");10
reConnectTimer.schedule(new ReConnectTimer(), delay);11
//reConnectTimer.cancel();12
return;13
}14
// 连接服务器 15
try {16
mConnection.connect();17
if(!mConnection.isAuthenticated()){18
mConnection.login();19
reConnectTimer.cancel();20
}21
Log.i(TAG, "重连成功");22
Intent intent = new Intent(SmackConst.ACTION_RECONNECT_SUCCESS);23
mService.sendBroadcast(intent);24
} catch (Exception e) {25
Log.i(TAG, "重连失败,"+delay/1000+"s后重新连接");26
e.printStackTrace();27
reConnectTimer.schedule(new ReConnectTimer(), delay);28
} 29
30
} 31
}
资源地址:https://github.com/liuhaijin/Smack-Openfire
菜鸟一枚,共同学习~~
转载地址:https://www.cnblogs.com/code0001/p/6495851.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.77.167.56]2022年12月04日 14时49分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
最新文章
InfluxDB配置总结-通过配置参数和Curl命令
2019-07-31 22:59:15
python的@classmethod和@staticmethod详解
2019-07-31 22:59:14
python获取CPU和操作系统类型
2019-07-31 22:59:14
InfluxDB C++ client支持windows和c++11
2019-07-31 22:59:14
工业数据存储数据库选型比较
2019-07-31 22:59:13
Odoo14.0源码安装和系统搭建配置
2019-07-31 22:59:13
InfluxDB C++库介绍和使用
2019-07-31 22:59:13
深入理解右值引用(&&)、std::move()、移动构造函数,移动复制运算符
2019-07-31 22:59:12
snap7与西门子PLC连接配置
2019-07-31 22:59:12
pytorch 入门(1): pytorch库基本用法举例
2019-07-31 22:59:11
python虚拟环境virtualenvwrapper&virtualenv & venv & pipenv 之间的联系与区别
2019-07-31 22:59:11
Jetson Nano上pytorch 1.6.0 wheel安装包下载
2019-07-31 22:59:10
Nvidia Nano上从头构建Jetbot镜像安装指南
2019-07-31 22:59:10
Glog在linux和windows下的编译安装和使用
2019-07-31 22:59:10
Protobuf linux和windows下编译与使用
2019-07-31 22:59:09
对强化学习理解及其与有监督学习和无监督学习的比较
2019-07-31 22:59:09
机器学习-深度学习的关系思维导图
2019-07-31 22:59:09
ROS中多个工作空间同时工作
2019-07-31 22:59:08
Cartographer ROS上的编译安装和配置
2019-07-31 22:59:08
LPMS-CU2 IMU在 Nvidia Xavier安装配置
2019-07-31 22:59:08