需求:类似于一些邮箱客户端或聊天工具,但是没有他们那么复杂。就是Android启动一个service,然后服务器端可以随时向客户端发送信息。当然Android的ip是内网的,类似192.因此客户端要想收到服务器的信息,就必须维持一个长连接。问题:1、如何在尽量省电和省流量的情况下,维持这个长连接?2、如果用的是发送心跳包的方式来维持,这个心跳包的发送频率又是什么确定的呢?请回答具体一点的。

解决方案 »

  1.   

    1、如何在尽量省电和省流量的情况下,维持这个长连接?
    answer: 
            传统的想法是把手机端作为client,这样的话客户端始终需要主动向服务器发起请求,实质还是pull,而不是push。
             完全可以反过来把手机端作为server,PC(掌握最新信息的设备)一旦有数据直接向手机发起请求。
             2、如果用的是发送心跳包的方式来维持,这个心跳包的发送频率又是什么确定的呢?
    answer: 你的前提是省电,所以要仔细想想该方式下如何省电。
             如,实现心跳频率可配置,由服务器端按数据更新频率设置心跳频率。
      

  2.   

    push技术还不是很多资料,我了解的一个是androidpn,在jetty容器运行,你可以了解下。或者你找到一个发短信的平台,需要推送的时候就给发短信,然后客户端那边截取短信,并作出相应通知
      

  3.   

    如果是无规律的那就建议用方法一
    1、如何在尽量省电和省流量的情况下,维持这个长连接?
    answer: 
    传统的想法是把手机端作为client,这样的话客户端始终需要主动向服务器发起请求,实质还是pull,而不是push。
    完全可以反过来把手机端作为server,PC(掌握最新信息的设备)一旦有数据直接向手机发起请求。楼上有人提到jetty容器,它的实质是一个轻量级的servlet容器。
      

  4.   

    客户端用serverSockets是可以实现推送的,那个androidpn应该也是用到这个,可能优化了一点吧。。我自己就层在手机上用serverSocket,接受从电脑上socket的链接。楼主想自己整一个简单的,完全可以自定义一些协议
      

  5.   


    client上的wifi,ip是192.的,我server如果不再同一个局域网,怎么连上去呢?
      

  6.   

    没错,当时我玩的就是内网不知道手机有没有类似于花生壳之类的玩意但手机有一个servlet容器,叫ijetty
      

  7.   

    我用androidpn完成过一个,但是是用在毕设里的。根本没经过有效的测试,但是据我观察对服务器的压力还是蛮大的。而且需要在客户端(android手机上)额外开一个service,肯定是耗电的。不过能够实现网络上推送。