AndroidPN中的心跳检测

在AndroidPN客户端里存在着心跳检测功能。就是每隔一段时间客户端向服务器端发送一个消息,以检测连接是否正常,发送的消息内容为:

<presence id="h09Ke-13"></presence>

心跳检测频率时间在SmackConfiguration类中设置:


心跳检测任务的定义及开启在PacketWriter类中:

心跳检测的流程:

1.按心跳时间定时向服务发送心跳数据包;

2.如果发送失败,抛出发送失败的异常;

3.这个异常将被PersistentConnectionListener监听器的connectionClosedOnError方法捕捉到,这个方法的参数就是一个Exception对象;

4.在connectionClosedOnError方法里将断开上次连接对象,然后再启动ReconnectionThread线程去重新连接服务器;

5.如果连接再失败,waiting参数将自加一,将ReconnectionThread下次连接服务器的时间间隔延长,作用是控制客户端在服务器未开启的时候不要频繁的连接服务器,

这样客户端不会做很多无用的工作;

以上是自己对代码的追踪理解的,如果有理解不对的地方请指正,谢谢。

参考:

http://blog.csdn.net/majian_1987/article/details/9856127

时间: 2024-10-26 18:14:51

AndroidPN中的心跳检测的相关文章

c#网络通信框架networkcomms内核解析之四 心跳检测

在网络通信程序中,心跳检测是必不可少的,我们来看一下networkcomms中是如何实现的 以networkcomms2.3.1为例: 在服务器端,会有一个线程专门用来发送心跳消息 代码如下: protected static void TriggerConnectionKeepAliveThread() { lock (staticConnectionLocker) { if (!shutdownWorkerThreads && (connectionKeepAliveWorker ==

如何在socket编程的Tcp连接中实现心跳协议

心跳包的发送,通常有两种技术 方法1:应用层自己实现的心跳包 由应用程序自己发送心跳包来检测连接是否正常,大致的方法是:服务器在一个 Timer事件中定时 向客户端发送一个短小精悍的数据包,然后启动一个低级别的线程,在该线程中不断检测客户端的回应, 如果在一定时间内没有收到客户端的回应,即认为客户端已经掉线:同样,如果客户端在一定时间内没 有收到服务器的心跳包,则认为连接不可用. 方法2:TCP的KeepAlive保活机制 因为要考虑到一个服务器通常会连接多个客户端,因此由用户在应用层自己实现心

Netty实现服务端客户端长连接通讯及心跳检测

通过netty实现服务端与客户端的长连接通讯,及心跳检测.        基本思路:netty服务端通过一个Map保存所有连接上来的客户端SocketChannel,客户端的Id作为Map的key.每次服务器端如果要向某个客户端发送消息,只需根据ClientId取出对应的SocketChannel,往里面写入message即可.心跳检测通过IdleEvent 事件,定时向服务端放送Ping消息,检测SocketChannel是否终断.         环境JDK1.8 和netty5      

介绍开源的.net通信框架NetworkComms框架之五 心跳检测

原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是:Apache License v2 开源地址是:https://github.com/MarcFletcher/NetworkComms.Net 我们知道TCP连接建立之后,如果没有心跳检测,连接一会就断开了.NetworkComms框架本身已经完美实现了心跳检测,我们在使用的时候不用再关心这个问

windows cluster 心跳检测阀值优化

通过cmd命令Cluster.exe /prop查看当前群集的属性信息,其中心跳阀值相关属性: SameSubnetDelay:同一子网中的节点的测信号频率 SameSubnetThreshold: 同一子网中的节点的延迟的阈值 CrossSubnetDelay: 不同的子网中的节点的检测信号频率 CrossSubnetThreshold: 在不同的子网中的节点的延迟的阈值 SameSubnetDelay 默认代表每1秒执行一次Windows群集心跳检测,SameSubnetThreshold

Netty实践(四):心跳检测实现

心跳检测的概念 在分布式架构中,比如Hadoop集群,Storm集群等,或多或少都涉及到Master/Slave的概念,往往是一个或者多个Master和N个Slave之间进行通信.那么通常Master应该需要知道Slave的状态,Slave会定时的向Master进行发送消息,相当于告知Master:"我还活着,我现在在做什么,什么进度,我的CPU/内存情况如何"等,这就是所谓的心跳.Master根据Slave的心跳,进行协调,比如Slave的CPU/内存消耗很大,那么Master可以将

EF架构~通过EF6的DbCommand拦截器来实现数据库读写分离~再续~添加对各只读服务器的心跳检测

回到目录 上一讲中基本实现了对数据库的读写分离,而在选择只读数据库上只是随机选择,并没有去检测数据库服务器是否有效,如服务器挂了,SQL服务停了,端口被封了等等,而本讲主要对以上功能进行一个实现,并对配置文件也进行了一些优化,让它更好的支持多个数据库服务器,分别配置各个的账号和密码及数据库服务端口等等,接下来,就来看一下主要的代码吧. 一 配置文件 <!-- ef实现对sql读写分离的配置,sqlserver端采用发布与订阅实现 --> <add key="readDb&quo

通过netty实现服务端与客户端的长连接通讯,及心跳检测。

基本思路:netty服务端通过一个Map保存所有连接上来的客户端SocketChannel,客户端的Id作为Map的key.每次服务器端如果要向某个客户端发送消息,只需根据ClientId取出对应的SocketChannel,往里面写入message即可.心跳检测通过IdleEvent 事件,定时向服务端放送Ping消息,检测SocketChannel是否终断. 环境JDK1.8 和netty5 以下是具体的代码实现和介绍: 1公共的Share部分(主要包含消息协议类型的定义) 设计消息类型:

Netty之心跳检测技术(四)

Netty之心跳检测技术(四) 一.简介 "心跳"听起来感觉很牛X的样子,其实只是一种检测端到端连接状态的技术.举个简单的"栗子",现有A.B两端已经互相连接,但是他们之间很长时间没有数据交互,那么A与B如何判断这个连接是否可用呢?我们通常的做法就是,让任何一方,例如我们让A端,定时的发送(例如每5秒钟)一句问候"Are you ok?",如果B都到来自A的问候,回了一句"GUN",A收到了来自B的信息,也不在乎B到底给我回了