`

Server-Push 深究【翻译】

阅读更多

翻译wiki上面的文章:http://en.wikipedia.org/wiki/Push_technology

对server-push有个更加完整的了解。

 

Push technology 或者说 server push ,是说一种基于互联网的交流,其请求是由publisher或者说中央服务端。与pull technology不同,pull technology是一种请求由接受方或者说客户端发起的。

 

通用领域

    Push 服务经常使用在这种场景,对某一信息有偏好,希望得到及时的信息。也也称为发布/订阅模式。一个client 可能会订阅(subsribe)多种信息,就会链接到这些信息的通道(Channels)上面。只要一有新的内容出现在这些通道里面,服务端就会把信息 Push给 订阅的用户。

    同步会议(Sychronous conferencing) 和及时消息(instant messaging) 是典型的push 服务的案例。当用户一接受到消息服务就有聊天信息有时是文件被push到用户手中。如分散的点对点程序(比如WASTE)或者是集中式程序(比如是IRC 或者XMPP)就允许push文件,这就是说sender发起数据传输而不是接收者,

     Email也是一种服务推的系统:SMTP协议是基于一种push协议的(see Push e-mail)。然而,最后一步--从邮件服务器到客户端电脑--典型使用的是pull协议就像pop3或者imap. 新式的e-mail客户端通过不停的polling 邮件服务器,频繁的check 新邮件,却这一步看起来像是瞬时的,而IMAP 协议包含了 IDLE命令,这个命令允许服务端告知客户端有新信息到达。而原始的BlackBerry就是一个典型的受欢迎的push 技术程序,应用Push technology完成了无线email。

     另一种流行的使用了push 技术的互联网应用,就是PointCast Network,盛行在1990s.它主要是发布新闻和股票市场信息。NetScape和Microsoft 都将它集成在软件中来增加浏览器大战的资本,然而后期慢慢的落寞了,在2000s被RSS(pull 技术)替代。

     另外一些push技术就在使用在web 应用上面,发布一些市场数据(股票代号),在线聊天系统(webchat),拍卖,在线博彩和游戏,体育结果,监控主机系统和传感器网络监控系统。

 

 

技术

    HTTP server push

     HTTP server push(也称为 HTTP streaming)是一种从web服务器发送信息到web浏览器的机制。HTTP server push 有很多种机制来进行达到push效果。

    通常,web服务端在发送response 信息给客户端后,不会关闭这个链接。会保持这个链接open,以至于当有新的事件发生,它可以马上告知到一个或多个客户端。如果关闭了,那事件数据只能等到客户端发送新的请求的时候,才能发送到客户端去。大多数的web服务器都提供这种功能通过CGI(e.g Non-Parsed Headers scripts on Apache)

    另外一种机制与一个特殊的MIME标记mutilpart/x-mixed-replace有关,这个是由netscape在1995年引入的概念。web浏览器会将这个翻译为:当服务端push 一个新版本给客户端 文档就改变一次(没能理解.) 现在还被firefox、Opera和Safrai支持,可是被微软所无视。这种方式可以应用在HTML文档上面,也可以应用在流媒体像网络摄像头应用。

     WHATWG web1.0应用程序建议引入一种机制来push信息到客户端。在2006.9.1,Opera 浏览器实现了一种新的实验技术,称之为“Server-Sent  Events” 现在也是HTML5的一个标准部分。另外一种就和HTML5有关的Web Sockets API,这个就允许web服务端和客户端以一种全双向的TCP链接来互相通信息。Web Scokets 从Google 的Chrome浏览器4.0.249.0版本中开始支持,并且有一种商业的java script库Kaazing 仿真模拟这种效果。

 

     Java pushlet

     pushlet是一种技术最初用于开发Java web应用,但这种技术也可以应用在其他的web应用框架里面。这种技术里面,服务器充分里面持久的HTTP链接并且让response 永久的open着(意味着永远不会关闭response)。这种方式就是让浏览器一直在loading的状态,而基本信息已经完全传送过去了。服务端就偶尔不定期的发送一些java script的片段到浏览器来更新页面信息,从而实现push的效果。使用这种技术,客户端就不必使用Java applets 或者其他的插件来保持与服务端的链接。客户端可以自动的得到新事件的通知。然后这种方法的比较严重的缺点,就是服务端不能控制浏览器的超时问题。当超时发送在浏览器的时候,页面刷新是必须的。

    

     Long polling(长轮询)

     Long polling 是一种传统的polling技术的变异,效仿成信息由服务端推送到客户端的模式。在一个长polling的时候,client向server请求信息就像传统的poll,然而当服务端没有信息发送给客户端的时候,不同于传递一个空的reponse,服务端会保持这个请求,然后等待一些有效的信息发送给客户端。一旦信息要发送的时候(或者在适宜的timeout之后)一个完整的response会发送给client。client通常会立马又重新请求信息给服务器,所以服务端会经常有一个有效的等待着的请求用来发送reponse 事件信息。

       Long polling 不是一个推技术,但是可以使用在 real push不可能实现的场景中。

 

    其他的技术

     Comet 这一词被用来描述在Ajax web应用中push 技术,它可以被称为是一种HTTP server push和Long polling的综合总称。

     XMPP也被用作push技术,特别是在PubSub的扩充。苹果公司使用这种技术作为Mobile Me的push支持。

     BOSH是保持HTTP长期有效的技术--XMPP使用着,然后这个可以使用在web上面。规范说明书(XEP-0124: Bidirectional-streams Over Synchronous HTTP (BOSH))说明: 这个说明说定义了一个传输的协议可以模拟HTTP长期有效,且在双向的TCP的两个链接实体之间(比如客户端和服务器)可以有效的使用多重的同步的HTTP req/res对,而没有需要----不停频繁的polling或者是长时间保持的response。

 

 

 

 

0
0
分享到:
评论

相关推荐

    cordova-hot-code-push-cli(热更新插件)

    热更新时,我们执行命令 npm install -g cordova-hot-code-push-cli安装插件,但运行cordova-hcp server会报错,如:Could not create tunnel: { Error: ngrok is not yet ready to start tunnels...,这时我们找到...

    【微信小程序-毕设期末大作业】k-push小程序(含后端源码).zip

    【微信小程序-毕设期末大作业】k-push小程序(含后端源码).zip 【微信小程序-毕设期末大作业】k-push小程序(含后端源码).zip 【微信小程序-毕设期末大作业】k-push小程序(含后端源码).zip 【微信小程序-毕设...

    K-push前端小程序

    在k-push-master中,开发者可能已经封装了一些自定义组件,如按钮、列表等,你可以研究它们的结构和使用方式,了解组件如何通信和传递数据。 4. **状态管理**:对于复杂的小程序,状态管理是必不可少的。K-push可能...

    helm-push_0.9.0_linux_amd64.tar.gz

    标题中的“helm-push_0.9.0_linux_amd64.tar.gz”是一个软件分发包,用于在Kubernetes环境中管理应用部署。Helm是Kubernetes的包管理工具,它允许用户通过图表来安装、升级和管理在集群上的应用程序。"push"功能可能...

    Android代码-react-native-push-notification

    npm install --save react-native-push-notification react-native link NOTE: For Android, you will still have to manually update the AndroidManifest.xml (as below) in order to use Scheduled Notifications...

    helm-push_0.8.1_darwin_amd64.tar.gz

    `helm-push`是一个扩展插件,它为Helm3增加了推送功能,允许用户将自己的Chart推送到私有仓库,以便在团队或组织内部安全地分发和部署应用程序。 `helm-push_0.8.1_darwin_amd64.tar.gz`这个文件名揭示了几个关键...

    react-native-code-push集成android篇.docx

    `npm install -g code-push-cli` 然后,注册 CodePush 账号,使用以下命令: `code-push register` 这时,系统会自动打开一个授权网页,选择一个你有账号的登录方式,例如 GitHub 登录。登录成功后,会在网页上...

    Server-push-to-Android.rar_Android push_push

    "Server-push-to-Android.rar_Android push_push"这个压缩包文件聚焦于服务端向Android设备进行数据推送的技术方案,其中包含了一份名为“服务端向Android推送数据解决方案总结.pdf”的文档。以下是对这一主题的详细...

    cordova-hot-code-push-cli20200529.rar

    启动cordova-hcp server报错 Could not create tunnel: { Error: ngrok is not yet ready to start tunnels 时,将路径 下的cordova-hot-code-push-cli文件下用下载的文件替换就可以了

    springboot-push.zip

    而“springboot-push.zip”这个压缩包显然包含了Spring Boot与多种移动设备推送服务的集成示例,包括Google推送(Firebase Cloud Messaging,FCM)、华为推送、OPPO推送、小米推送、VIVO推送、魅族推送以及极光推送...

    android M-push端源码 eclipse版

    《Android M-Push 端源码解析——Eclipse版》 在移动应用开发中,推送服务是一项不可或缺的功能,它能够实时地将服务器的消息传递给用户,提高用户的活跃度和应用的黏性。本文将围绕“Android M-Push 端源码...

    1620374400000_com.eg.android.AlipayGphone-push.2nd

    1620374400000_com.eg.android.AlipayGphone-push.2nd

    服务端推技术 - Server-side Push 多示例

    服务端推技术,也称为Server-side Push,是一种网络通信模式,允许服务器主动向客户端推送数据,而无需客户端发起请求。这种技术在实时性要求较高的应用中尤为重要,如在线聊天、实时股票更新、游戏同步等。在传统的...

    Laravel开发-laravel-push-notification Push Notification 服务端支持

    在本文中,我们将深入探讨如何使用 Laravel 框架中的 "laravel-push-notification" 扩展包来实现 Push Notification 的服务端支持。Push Notification 是移动应用中常见的功能,用于向用户实时发送消息、提醒或者...

    frida-server-14.0.8-android-arm64

    frida-server-14.0.8-android-arm64 ,frida 14.0.8 对应的安卓server内容,下载之后push到手机即可开始使用

    VIVO 推送 vPush-server-sdk-1.0.jar

    VIVO 推送 vPush-server-sdk-1.0.jar

    Laravel开发-laravel-push-notification

    "Laravel开发-laravel-push-notification"指的是一个专门针对Laravel框架的扩展包,它允许开发者轻松地在各种平台上,如Apple Push Notification Service (APN) 和 Firebase Cloud Messaging (FCM) 发送推送通知。...

    PHP-Push-2, 使用 caldav/ldap支持的Z 推送 fork.zip

    PHP-Push-2, 使用 caldav/ldap支持的Z 推送 fork PHP-Push-2PHP-Push-2是 z 推送 -2的modiefied版本,这是开源ActiveSync实现,带有CalDAV和多项目支持。特性使用"组合后端"php-push-2支持以下功能:邮件- IMAP日历-

    docker-rhel-push-plugin-1.13.1-47.2.gitf43d177.el7.x86_64.rpm

    docker-rhel-push-plugin-1.13.1-47.2.gitf43d177.el7.x86_64.rpm

Global site tag (gtag.js) - Google Analytics