Smack+Openfire搭建IM通信(Android 实现)
来源:互联网 发布:淘宝天猫黑名单处理 编辑:程序博客网 时间:2024/05/16 11:10
Smack是一个开源,易于使用的XMPP(jabber)客户端类库。优点:开源,简单,功能强大,给用户发送信息只需三行代码便可完成。缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大,1台机器只能模拟有限(数千个)客户.。
OpenFire是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。 Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。
1、首先去 http://www.igniterealtime.org 下载OpenFire和Smack
2、安装Openfire进入控制台
此处是服务器关于空闲连接的设置
建两个测试账号
用电脑端的Spark登录一个账号
3、手机端登录,代码和程序在后面
实现端到端通信
4、Smack通信模块示意图
5、Smack端实现关键代码(Android),包含心跳+自动重连机制
//配置连接,连接成功注册PingListener和MessageReceiver,发送登陆成功广播,这里因为业务需要我设置为10秒ping一次public void connect() {
Log.i(TAG, "connect()");
XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder(); configBuilder.setHost(SmackConst.XMPP_HOST); configBuilder.setServiceName(SmackConst.SERVICE_NAME); configBuilder.setUsernameAndPassword(mUsername, mPassword); configBuilder.setSecurityMode(SecurityMode.disabled); mConnection = new XMPPTCPConnection(configBuilder.build()); //Set ConnectionListener here to catch initial connect(); mConnection.addConnectionListener(this); try { mConnection.connect(); mConnection.login(); if(mConnection.isAuthenticated()){//登录成功MyPingManager.setDefaultPingInterval(10);//Ping every 10 secondsMyPingManager myPingManager = MyPingManager.getInstanceFor(mConnection);//Set PingListener here to catch connect statusmyPingManager.registerPingFailedListener(SmackConnection.this);setupSendMessageReceiver();//Set ChatListener here to catch receive message and send NEW_MESSAGE broadcast ChatManager.getInstanceFor(mConnection).addChatListener(this); //Set ChatListener here to catch roster change and rebuildRoster //Roster.getInstanceFor(mConnection).addRosterListener(this); sendLoginBroadcast(true); }else{ mConnection.disconnect(); Log.i(TAG, "Authentication failure"); sendLoginBroadcast(false); }} catch (Exception e) {e.printStackTrace();sendLoginBroadcast(false);Intent intent = new Intent(mService, mService.getClass());mService.stopService(intent);} }
//pingFailed时启动重连线程class ReConnectTimer extends TimerTask { @Override public void run() { // 无网络连接时,直接返回 if (getNetworkState(mService) == NETWORN_NONE) { Log.i(TAG, "无网络连接,"+delay/1000+"s后重新连接"); reConnectTimer.schedule(new ReConnectTimer(), delay); //reConnectTimer.cancel(); return; } // 连接服务器 try {mConnection.connect();if(!mConnection.isAuthenticated()){mConnection.login();reConnectTimer.cancel();}Log.i(TAG, "重连成功");Intent intent = new Intent(SmackConst.ACTION_RECONNECT_SUCCESS);mService.sendBroadcast(intent);} catch (Exception e) {Log.i(TAG, "重连失败,"+delay/1000+"s后重新连接");e.printStackTrace();reConnectTimer.schedule(new ReConnectTimer(), delay);} } }
资源地址 https://github.com/liuhaijin/Smack-Openfire
0 0
- Smack+Openfire搭建IM通信(Android 实现)
- Android基于XMPP Smack Openfire开发IM(1)搭建openfire服务器
- Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信
- xmpp openfire smack android IM demo
- openfire+android实现IM
- Android基于XMPP Smack Openfire开发IM(2)登录openfire
- Android基于XMPP Smack Openfire开发IM(2)登录openfire
- Android IM之基于Openfire+Smack的聊天服务器的搭建与测试
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- Sentry日志收集系统修复
- poj 2311 Cutting Game
- 在首页调用不同分类商品样式与广告,cat_goods.lib
- UWP 制作汉堡菜单及添加滑动手势
- 安卓组件------计时器
- Smack+Openfire搭建IM通信(Android 实现)
- 6.12、层次结构导航
- JAVA从入门到精通(10)-- 继承
- Spring Bean的生命周期(非常详细)
- mysql 安装问题小总结
- js 下载Base64格式数据图片(兼容主流浏览器)
- 根据环境变量配置,动态加载配置文件(区分开发环境,生成环境)
- java类加载流程
- 巧妙的利用Mongodb做地理空间查询