ESFramework Demo之iPhone版–心跳协议

上篇我们完成了登录功能,这一回我们一起看一下心跳协议。心跳协议是为了能让服务端实时感知到客户端的存在,为了实现这一目的,我们可以每隔一段时间就向服务端发送一条消息。这条件消息非常的简单,它只有消息头。只需定义它的MessageType就好了。在Rapid Demo中心跳协议的MessageType是104。

看上去我们要完成这件事好像很容易,事实上确实如此,我们只需按心跳协议构造一条这样的byte流,每隔几秒发出去就OK了。说起每隔几秒去做一件事,我知道winform中是有一个Timer控件的,iPhone开发中也有,它叫NSTimer,它为什么叫NSTimer呢,对啊,为什么还有NSObject,NSArray,NSData...,它们都会有NS,提到NS,话说当年乔帮主离开apple后,自己创建了一个叫NeXT Software的公司,乔帮主和他的工程师们搞出了Objective-C这个不同于C++的还有面向对象特征的C语言,并用它开发了一个很底层的类库,这个类库正是用NeXT Software的前缀来给类命名的,等乔帮主又回apple公司了.这些工程师还是基于这个类库再开发的,所以我们今天就看到了这些以NS开头的类名。有人说apple不好,是因为它太封闭了,只给看不见源码的api,不如android开放,其实NeXT Software的公司当年做的那个类库是开源,那些基础的类源码,在网上是可以找到并下载的。

讲完NS,再讲NSTimer,NSTimer使用起来非常简单,下面我们来看代码:

NSTimer*timer= [NSTimerscheduledTimerWithTimeInterval:5.0

target:self

selector:@selector(handleTimer:)

userInfo:nil

repeats:YES];

只需在构造时指定好具体的参数就好,这里我们让它每隔5秒就执行handleTimer这个方法,self就是说是我们类本身的方法。



停止它就这样一个方法就OK了



-(void)stopTimer{

[timerinvalidate];

timer=nil;

}





在handleTimer这个方法中,我们构造并发送心跳消息给Server.由于心跳消息只有消息头,比登录请求的消息还easy,我就不放代码了。在服务端收到心跳消息后,它会返回一条同样的消息给客户端的。心跳消息只为告知服务端,客户端的存在。一般我们是不对它进行处理的。只有当服务端收到这条消息后才会在界面上看到这个用户是在线的。如图:

ESFramework Demo之iPhone版--心跳协议

我们再用aa02这个winfrom客户端登上去也可以看到用 iphone客户端是存在的,如图:

ESFramework Demo之iPhone版--心跳协议

下一步,我们就是要做winform客户端刚刚做的事,一旦我客户端登录上来,我要知道现在有多少人在线,即获取在线用户列表的功能,这回到此,多谢
原文链接: https://www.cnblogs.com/upwifi/archive/2011/08/28/2156781.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/31339

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午8:35
下一篇 2023年2月8日 上午8:38

相关推荐