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 = [NSTimer scheduledTimerWithTimeInterval: 5.0
target: self
selector: @selector(handleTimer:)
userInfo: nil
repeats: YES];
只需在构造时指定好具体的参数就好,这里我们让它每隔5秒就执行handleTimer这个方法,self就是说是我们类本身的方法。
停止它就这样一个方法就OK了
-(void)stopTimer{
[timer invalidate];
timer = nil;
}
在handleTimer这个方法中,我们构造并发送心跳消息给Server.由于心跳消息只有消息头,比登录请求的消息还easy,我就不放代码了。在服务端收到心跳消息后,它会返回一条同样的消息给客户端的。心跳消息只为告知服务端,客户端的存在。一般我们是不对它进行处理的。只有当服务端收到这条消息后才会在界面上看到这个用户是在线的。如图:
我们再用aa02这个winfrom客户端登上去也可以看到用 iphone客户端是存在的,如图:
下一步,我们就是要做winform客户端刚刚做的事,一旦我客户端登录上来,我要知道现在有多少人在线,即获取在线用户列表的功能,这回到此,多谢