消息推送

来源:互联网 发布:软件下载大全 编辑:程序博客网 时间:2024/05/21 22:54

消息推送

消息推送(即时通讯)

  • 目的:想办法让服务器能够及时通知客户端
  • 服务器主动发送消息给客户端(建立服务器端和客户端建立长链接)
  • 应用场景:广告、即时通信
  • 实现方案:
    • 1、轮询:客户端每隔一定的时间就向服务器发出请求,获得最新的消息
      • 特点:
        • 1、如果应用在最新新闻通知上,则效率较低
        • 2、技术简单,好实现
      • 应用场景:当服务器端的数据以固定的频率更新时,比如股票信息,黄金,期货类似的信息
    • 2、发短信:
      • 特点:效率高,最及时,费用高
      • 应用场景:比较土豪的做法,不差钱
    • 3、使用第三方的开源项目
      • AndroidPN(android push notify)
    • 4、使用第三方的API实现推送功能
      • 百度推送
      • 极光推送
      • 个推
      • 微信推送
  • 实现方式
    • 第3和第4原理上都属于消息推送
    • 消息推送的实现原理:Socket长链接+心跳帧
    • 平常讲的java中的Socket通信、Socket链接就是短链接
    • 长链接:服务端和客户端进行通信,通信完后,Socket没有关闭,一直处于开启状态,服务器和客户端一直都有一个socket链接
    • 但是如果这个长链接有一段时间没用被利用,不用的话,就会被路由器认为是一个无用的链接,那么很有可能链接被断掉,断掉后服务器就无法再次找到客户端,就出现了心跳帧这个概念
    • 心跳帧:每隔一段时间发送一段极短的数据,证明客户端还活着。验证socket链接还存活着。告诉路由器这个链接有效
    • 如果发送消息失败,服务器将消息暂存起来,一旦检测到客户端恢复心跳,就重新发送。

AndroidPN(android push notify)

  • Androidpn :android pushnotification(中文名称:Android消息推送)。参考这里

    基于XMPP协议的java开发有一个开源框架,那就是smack,它主要封装了一些XMPP的实现。在引用smack的基础上

    实现和服务器端的持久连接,以实现服务器对客户端的推送,那就是Androidpn。Androidpn在客户端集成了smack。

    这样就可以很容易的简立一个和服务器端的基于xmpp协议的socket连接。所以Androidpn可以说是使用了smack框架

    的开源项目。

  • Androidpn使用好处:

    用Androidpn好处有以下方面:采用完全开放的XMPP协议进行数据传输(QQ,MSN,GTalk等都是采用的这种协议)。

    良好的框架支持(专门为android 而产生的推送框架smack,以及很好的管理socket的框架MINA,都是很成熟的产品);

    完全开放的源代码(我们可以在Androidpn的基础上进行修改,来满足我们的任何需求变更);大大的减少了客户端的代

    码,降低了android的开发难度。

  • XMPP网络协议

    XMPP : The Extensible Messaging andPresence Protocol.

    中文全称:可扩展通讯和表示协议.

    简介:可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。

    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。

    它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即

    使其操作系统和浏览器不同。

  • XMPP主要显著的优点主要有以下几个方面:

    • 1、分布式 任何人都可以运行自己的XMPP服务器,它没有主服务器,客户端简单

    • 2、安全性很高。使用SASL及TLS等技术的可靠安全性

    • 3、开发性 它是开源的,易于进行学习和了解

    • 4、跨平台 毋庸置疑,使用的XML数据格式进行传输的

    • 5、单台机器就可以容纳20万个链接,非常稳定,支持扩展和自定义
  • XMPP缺点:如果定制的话需要专业的javaEE知识

  • androidPN环境搭建这里

  • 缺点:但是稳定性差、连接数量有限、目前已经停止维护了;

Socket、HttpUriConnection、HttpClient、HttpUtils之间的关系

  • Socket :JAVA中一切的联网最终都是Socket联网
  • HttpUrlConnection:一个工具类,底层还是Socket,最基本的发出联网请求的工具类
  • HttpClient:HttpClient源码可以看出它内部也是HttpUrlConnection,不过Android的6.0版本中删除了的Apache HTTPclient支持。如果您的应用程序正在使用HTTP client和目标版本是Android2.3(API等级9)或更高,使用HttpURLConnection类类来代替HTTP client
  • HttpUtils:Xutils这个开源框架的一个模块

  • com.wsc.jpushtest

  • JPushTest

消息推送的扩展

应用场景广泛,实际上只要涉及到服务器要主动地使客户端被动地收到某一条消息,然后执行相关功能的逻辑全都可以推送来解决

扩展:

  • 客户端自动的获取数据,客户端不主动的调接口,服务端有数据的时候,客户端就能够自动收到数据

PS

  • 消息推送(server 端 主动发消息给客户端)
  • 一、原声Android支持的消息推送C2DM

    • 1.2012年6月之前C2DM(cloud to device message),依赖google的Gtalk账号和google服务。
    • 2.国产手机的google服务必须被去掉,工信部规定。
    • 3.国内没法用,国外可以用。
  • 二、C2DM - > GCM

    • 1.gcm(google cloud 2 message) 是C2DM升级版
    • 2.API相对于C2DM更友好,直观,根据API提示就可以完成消息推送的过程
    • 3.依赖google的服务
    • 4.GCM目前也不被推荐了
  • 三、第三方的消息推送

    • 1.个信(商业服务收费)
    • 2.巴别塔(商业服务收费)
    • 3.极光推送(商业服务收费)
    • 4.百度推出消息推送(免费,可以百度的消息推送)
  • 四、自己开发

    • 1.XMPP协议,实现XMPP协议来达到消息推送的目的
    • 2.改造OpenFire,达到推送的目的
    • 3.AndroidPN(韩国人写的项目,spring + struts ),需要自己晚上,保持连接,异常的处理,断线,上线都有很多bug
    • 4.成本太大,server的开销很大。
  • 五、server端轮询

    • 1.客户端循环的向server端指定的端口发送请求,
    • 2.5s,10s,2m,10m,查看消息,有没有我的消息?有,取下来,没有,走人。
0 0
原创粉丝点击