• 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客户端刚刚做的事,一旦我客户端登录上来,我要知道现在有多少人在线,即获取在线用户列表的功能,这回到此,多谢

  • 相关阅读:
    php利用__callStatic静态调用同类中非静态方法
    Using $this when not in object context错误原因及解决办法
    fastadmin权限修改
    call_user_func()
    php empty()奇怪现象
    LF will be replaced by CRLF in vendor/
    git放弃本地,强制拉取远程
    tp5防xss攻击方法
    php curl
    关于Mac设置alias别名访问服务器
  • 原文地址:https://www.cnblogs.com/upwifi/p/2156781.html
Copyright © 2020-2023  润新知