zoukankan      html  css  js  c++  java
  • Web Application Push API

    (原文见:http://www.xdarui.com/index.php/archives/111 )

        本月18日W3C发布了一个新的草案《Push API》,原文见这里:http://www.w3.org/TR/push-api/ 。不才鄙陋,目前只是一知半解。下面文叔给大家分享下这份草案,当然还是建议同学们直接无视本文而直接到W3C的原文地址学习。由于只是草案,同时的随时都有可能被更新或替代或废掉,谁知道明天是什么样呢。

        关于PUSH

        这块的内容有两位博主已经写的很详细了,我这里直接帖出原文地址,没有相关知识背景的同学可以移步这里:1.手机Push机制 http://blog.163.com/fuhaocn@126/blog/static/36665080201204103631378/  2.关于手机Push http://www.cnblogs.com/aspnethot/articles/2258724.html 

         Webapps Push

         webapps是指当前很多WEB端网站已经脱离了简单的展示或表单提交之类,如Gmail这种富前端应用已经上升到了一个应用程序只是这个应用程序是在WEB端而已,主要代码由Javascript构成。好了不废话,下面咱们直接聊正题。《Push API》草案旨在为WEB前端提供处理服务器推送消息能力。Push服务与 web应用的的活跃状态无关。 Push消息可以通过多种标准的协议分发(如SSE/GSM-SMS/SIP MESSAGE/OWA PUsh),或通过特定的浏览器方法。

          PUSH的工作流程与移动手机端类似:首先,程序需要产生一个唯一的 Token ,然后使用这个ID由用户显示授权同意后web程序方可与服务器建立push通道。

          为了演示我就直接把W3C的示例直接搬过来了:

     

          EXAMPLE 1

         var token = getGuid(); // get GUID as unique token

         var mypush = requestRemotePermission(token);

       mypush.onerror = function () {

       alert("darn! "+e.message);

      };

    mypush.onsuccess = function () {

      var activate = "http://example.com/push/activate?token="+token+

        "&serviceUrl="+encodeURIComponent(mypush.serviceUrl)+

        "&serverProtocols="+mypush.serverProtocols;

      asyncXHR(activate); // send activation request to application server

             

      mypush.wakeup = true;

             

      mypush.onmessage = function (event) {

        document.getElementById(‘message’).innerHTML = event.data;

      };

    };

     

          按草案所述navigator需要实现NavigatorPush接口,这个接口定义了 push 属性( readonly ) 。同时草案也定义了另一个接口:PushManager 。( 按草案所述应该是 window 会实现这个接口 )。PushManager提供了两个方法:

          checkRemotePermission和requestRemotePermission。 使用checkRemotePermission方法可以检查当前 web应用是否已经得到了用户授权(这个过程中不需要用户操作介入),如果当前程序已经获得授权则会调用 success回调否则执行 error 回调。success回调可以返回一个PullService对象( 与调用requestRemotePermission方法所获取的一样 )。requestRemotePermission首先会通过用户代理(一般对我们来说是指浏览器了)询问用户是否授权,如果用户同意那么由程序产生的唯一Token就会成为Push服务的地址(目标服务),同时激活Push服务。下面给出的是相关的IDL定义:

    [NoInterfaceObject]

    interface NavigatorPush {

        readonly attribute PushManager push;

    };

    interface PushManager {

        PushService requestRemotePermission (DOMString appToken, optionalDOMString publicKey, optional DOMString algorithm);

        PushService checkRemotePermission (DOMString appToken);

    };

     

          PushService接口

          web程序通过PushService接口处理Push服务。它的定义如下:

    interface PushService : EventTarget {

        readonly attribute DOMString      appToken >;

        readonly attribute DOMString      publicKey;

        readonly attribute DOMString      algorithm;

        readonly attribute DOMString      serviceUrl;

        readonly attribute DOMString[]    serverProtocols;

        readonly attribute DOMError       error;

                 attribute boolean        wakeup;

        

                 attribute Function?      onsuccess;

        

                 attribute Function?      onerror;

        

                 attribute Function?      onmessage;

        void close ();

        readonly attribute unsigned short readyState;

        const unsigned short CONNECTING = 0;

        const unsigned short OPEN = 1;

        const unsigned short CLOSED = 2;

    };

          说明:

     

             1.如果多个web程序产生的Token一致,那么发送到这个Token作为地址的Push消息会同时发给这几个实例。说通俗点就是如果A和B同时拿着票T去登记,那么登记处在通知T可用的时候会同时通知A和B两个。

             2.为了验证Push消息的来源正确,应用服务可以对Push消息进行签名。如果这样做则PushService应当有其相对应的publicKey及algorithm (算法)。

             3.Push服务与web程序是否活跃无关,同一个web程序也可以注册多个push服务。同一个web程序的多个实例也可以各自注册自己的push服务。

          

  • 相关阅读:
    NX二次开发-Block UI C++界面Body Collector(体收集器)控件的获取(持续补充)
    NX二次开发-Block UI C++界面(表达式)控件的获取(持续补充)
    NX二次开发-常用lib库文件
    NX二次开发-如何在类外面定义一个结构体
    NX二次开发-bat脚本文件切换NX的环境变量(NX路径和语言)
    NX二次开发-相对路径环境变量和绝对路径环境变量
    NX二次开发-UFUN所有对象类型的宏定义
    NX二次开发-UFUN创建球UF_MODL_create_sphere1
    NX二次开发-UFUN获取球的参数UF_MODL_ask_sphere_parms
    NX二次开发-UFUN获取块的参数UF_MODL_ask_block_parms
  • 原文地址:https://www.cnblogs.com/darrel/p/2765560.html
Copyright © 2011-2022 走看看