`
cppmule
  • 浏览: 450581 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

解决androidpn服务器端掉线不会重连的问题

 
阅读更多

解决androidpn服务器端掉线不会重连的问题

winktj 发布于 3个月前,共有 0 条评论

前面的一个项目里面用到了androidpn来做推送服务,众所周知androidpn这个项目还没成熟,还存在一点小bug。 
我是从 https://github.com/dannytiehui/androidpn这里clone androidpn下来的,看说明已经解决了很多问题了。不过经过和服务器对接调试之后还是发现了存在客户端不会在服务端重启后,重新链接的问题。 

google了一下,发现已经有兄弟提供了修正bug的办法。 

原文地址已经失效,以下是别人转的 
http://topmanopensource.iteye.com/blog/1609214 

里面提供的解决方法是 
在org.androidpn.client.XmppManager的LoginTask方法中加了一行代码getConnection().startKeepAliveThread(xmppManager);跟踪进去发现是开启了一个线程发送心跳,当发送失败时捕获异常,客户端每隔一段时间进行重连。 
catch (SocketException e) {
Log.e("PacketReader", e.toString());
connection.disconnect();
xmppManager.startReconnectionThread();
} catch (IOException e) {
e.printStackTrace();
}

 

这样就达到了当与服务端失去连接时,客户端能够进行重新连接的效果。后来群里有朋友说在LoginTask方法中加入 
getConnection().startKeepAliveThread(xmppManager); 编译就报错,那是因为他用的是第一个版本 ,所有请先下载第二个版本,第二个版本带大神精简过smack源码。 其实心跳机制在官方的asmack中就已经存在,并且在建立XmppConnection的时候就已经启动,但是遗憾的是asmack的开发人员并没有进行异常之后的重连 
如上所说,在我添加 getConnection().startKeepAliveThread(xmppManager);之后的确是报错了,因为Xmppconnection里面没有这个方法,而文中所说的第二个版本我怎么找也没找到。(找到的同学能否发我一份?)

虽然我下载到的那个版本并不是上文所提到的,顺从他的思路或许就能解决问题。
androidpn出现这样的问题原因主要是因为PacketReader和PacketWriter里面对一些异常没有进行处理.

 // Close the stream.
            try {
                writer.write("</stream:stream>");
                writer.flush();
            }
            catch (Exception e) {
                // Do nothing
            }
            finally {
                try {
                    writer.close();
                }
                catch (Exception e) {
                    // Do nothing
                }
            }

解决思路是在LoginTask里面打开一个发送一个心跳包的线程,这个线程用于与检测与服务器的链接状况,当发生异常时,我们自己做重连的处理。

首先,在Xmmpmanager里面添加心跳包线程的内部类

分享到:
评论
4 楼 scliu0718 2013-09-29  
dagmom 写道
掉线重连的问题属于比较好解决的,原本login那块就有添加listener的,锁屏后系统休眠不在发送心跳,连接断开,这是需要我们手动利用android不会休眠的方法手动发送心跳

这个不用手动做吧。 在PackWriter中,做了这件事儿,有startKeepAliveProcess()方法是每隔30s发空串
3 楼 zfms 2013-08-14  
如上所说,在我添加 getConnection().startKeepAliveThread(xmppManager);之后的确是报错了,因为Xmppconnection里面没有这个方法,而文中所说的第二个版本我怎么找也没找到。(找到的同学能否发我一份?)


楼主也发我一份吧。
2 楼 zfms 2013-08-14  
如上所说,在我添加 getConnection().startKeepAliveThread(xmppManager);之后的确是报错了,因为Xmppconnection里面没有这个方法,而文中所说的第二个版本我怎么找也没找到。(找到的同学能否发我一份?)


也发我一份吧,我的qq 64738479  不胜感激
1 楼 dagmom 2013-05-13  
掉线重连的问题属于比较好解决的,原本login那块就有添加listener的,锁屏后系统休眠不在发送心跳,连接断开,这是需要我们手动利用android不会休眠的方法手动发送心跳

相关推荐

    androidpn服务器端和客户端

    可以运行的androidpn服务器代码和客户端代码,服务器代码直接解压然后找到bin目录下面的run.bat文件双击运行即可,客户端的代码直接导入eclipse,改下raw/androidpn.properties里面的: apiKey=1234567890 xmppHost...

    androidpn服务器推送

    2. **自动重连机制**:在描述中提到,AndroidPN服务器在重启后能自动与客户端重新建立连接。这是通过客户端实现一个心跳检测机制来实现的,客户端定时向服务器发送“心跳”信息,如果服务器未收到一段时间内的“心跳...

    androidpn 消息推送 服务器端源码

    AndroidPN(Android Push Notification)是一个专门针对Android平台设计的消息推送系统,其服务器端源码的开放为开发者提供了自定义和扩展的可能性。本文将深入探讨AndroidPN服务器端源码的关键知识点,帮助开发者...

    androidpn(客户端和服务器端)

    androidpn 的客户端和服务器端源码. 使用说明: 解压后得到两个压缩包: androidpn-client.zip和androidpn-server-0.5.0-bin.zip, 解压两个包,Eclipse导入client,配置好目标平台,打开raw/androidpn.properties...

    androidpn自动重连

    在本文中,我们将深入探讨如何解决AndroidPN服务端重启后客户端无法自动重连的问题。 首先,我们需要理解AndroidPN的工作原理。AndroidPN基于XMPP(Extensible Messaging and Presence Protocol)协议,这是一种...

    androidpn解决重连

    根据提供的文件信息,我们可以深入探讨AndroidPN中有关“解决重连”的关键技术点。本文将从以下几个方面进行详细解析:服务管理、通知服务、XMPP管理器、持久连接监听器、通知包监听器、重新连接线程以及与这些组件...

    androidpn 消息推送客户端+服务器端

    AndroidPN客户端是安装在用户Android设备上的应用程序,它的主要任务是接收来自服务器端的消息并将其展示给用户。客户端通过注册一个唯一的设备ID到服务器,然后保持与服务器的持久连接,以便随时接收推送通知。这种...

    androidpn配置步骤

    AndroidPN是一种开源的推送框架,它基于XMPP协议,能够实现在Android客户端上接收来自服务器端的消息推送。与Google的C2DM(Cloud to Device Messaging)相比,AndroidPN在国内环境下更加实用,因为它避免了由于...

    androidpn-服务器项目

    服务器端的实现是AndroidPN项目的核心部分。根据提供的链接,我们可以在CSDN博主wuhualong1314的文章中找到关于如何设置和修改服务器端代码的详细步骤。这篇文章详细介绍了如何搭建一个基于Java语言的AndroidPN...

    androidpn推送服务器端+手机端(版本3.0)

    在"androidpn推送服务器端+手机端(版本3.0)"的压缩包中,包含了实现这一功能的服务器端和客户端的源代码。 **服务器端知识点** 1. **推送服务架构**:AndroidPN服务器端基于XMPP(Extensible Messaging and ...

    androidpn 服务端和android端源代码

    "AndroidPN 服务端和Android端源代码"是关于...这不仅可以加深对Android平台的理解,也有助于提升服务器端编程和网络通信技术。对于希望构建自己的推送服务或改进现有推送机制的开发者来说,这是一个宝贵的资源。

    androidPN推送服务器

    3. **部署应用**:将AndroidPN服务器端的WAR文件部署到Tomcat的`webapps`目录下,Tomcat会自动解压并启动应用。 ### 四、客户端集成 1. **获取注册ID**:在客户端应用中,首先需要注册到GCM/FCM并获取注册ID。 2. ...

    Androidpn tomcat版本

    这个项目通常需要与服务器端的组件配合工作,其中Tomcat作为常用的Java应用服务器,常常被用于部署AndroidPN的服务器端。 AndroidPN的核心机制是基于XMPP(Extensible Messaging and Presence Protocol)协议,这是...

    androidpn服务器代码

    在本篇文章中,我们将深入探讨AndroidPN服务器端的代码结构、功能模块以及运行环境需求。 首先,AndroidPN服务器主要由Java编写,它依赖于MySQL数据库存储用户信息和推送消息,以及Tomcat应用服务器来部署和运行。...

    androidpn基于Xmpp的消息推送源码.zip

    androidpn基于Xmpp的消息推送源码包含了完整的客户端和服务器端。androidpn客户端需要用到一个基于java的开源XMPP协议包asmack,这个包同样也是基于openfire下的另外一个开源项目smack,不过我们不需要自己编译,...

    androidPN server端源码eclipse tomcat版

    首先,`androidPN`这个文件夹很可能包含了整个项目源码,包括服务器端的Java代码、配置文件以及必要的库文件。在Eclipse中导入这个项目,通常需要执行以下步骤: 1. 打开Eclipse,选择“File” -&gt; “Import”。 2. ...

    androidpn-tomcat-server端

    6. **Java编程**:由于AndroidPN使用Java作为服务器端的主要编程语言,开发者需要熟悉Java SE和Java EE的相关概念,如Servlets、JSP、EJB等。 7. **Tomcat配置**:部署在Tomcat上的Java Web应用需要遵循特定的目录...

    androidpn消息推送

    文件"**dannytiehui-androidpn-27607bf**"很可能是一个源码仓库或压缩包,包含了AndroidPN的完整实现,包括客户端和服务器端的代码。开发者可以通过下载并研究这些代码来了解AndroidPN的工作原理,或者直接将其作为...

    androidpn推送客户端服务器端完整代码

    服务器端基于tomcat,解决了断线重连等BUG,采用mysql数据库,注意修改hibernate配置文件中的用户名密码,直接导入工程可用,客户端如果ADT版本过高,就把lib改成libs,注意修改访问的服务器的ip地址!

    经过修改的Androidpn项目

    Androidpn通过构建服务器端与客户端之间的通信管道,实现在需要时将消息高效推送到目标设备的功能。这一功能对于开发者来说至关重要,因为它能够帮助他们构建更智能、更省电、用户体验更佳的应用。 源代码中的注释...

Global site tag (gtag.js) - Google Analytics