服务器内容推送技术

1、    传统轮询:利用WEB页面META刷新机制,指定一定时间间隔进行页面装载服务。
不足:用户体验差,服务器压力大
2、    Ajax轮询:采用异步响应机制
不足:有延迟,服务器压力比较大,客户端主动请求
3、    Comet:建立到服务器的长连接机制,服务器推送技术是保持原有的HTTP协议不 变,在服务器端改变处理方式,使得服务器能够使用浏览器已经打开的HTTP连接,主动向浏览器发送消息。这里关键的技术是要保持原有的 HTTP连接不断。一旦拥有持久的连接,服务器就可以根据自己的数据更新,随时地向客户端发送最新的信息。
Comet的实现是基于异步请求服务(ARP)之上的,因此整个框架结构仍然符合ARP的模式。

将“服务器推”应用在 Web 程序中,首先考虑的是如何在功能有限的浏览器端接收、处理信息:

1. 客户端如何接收、处理信息,是否需要使用套接口或是使用远程调用。客户端呈现给用户的是 HTML 页面还是 Java applet 或 Flash 窗口。如果使用套接口和远程调用,怎么和 JavaScript 结合修改 HTML 的显示。
   2. 客户与服务器端通信的信息格式,采取怎样的出错处理机制。
   3. 客户端是否需要支持不同类型的浏览器如 IE、Firefox,是否需要同时支持 Windows  和 Linux 平台。

基于客户端套接口的“服务器推”技术

Flash XMLSocket

这种方案实现的基础是:

1. Flash 提供了 XMLSocket 类。
   2. JavaScript 和 Flash 的紧密结合:在 JavaScript 可以直接调用 Flash 程序提供的接口。

具体实现方法:在 HTML 页面中内嵌入一个使用了 XMLSocket 类的 Flash 程序。JavaScript 通过调用此 Flash 程序提供的套接口接口与服务器端的套接口进行通信。JavaScript 在收到服务器端以 XML 格式传送的信息后可以很容易地控制 HTML 页面的内容显示。

Javascript 与 Flash 的紧密结合,极大增强了客户端的处理能力。从 Flash 播放器 V7.0.19 开始,已经取消了 XMLSocket 的端口必须大于 1023 的限制。Linux 平台也支持 Flash XMLSocket 方案。但此方案的缺点在于:

1. 客户端必须安装 Flash 播放器;
   2. 因为 XMLSocket 没有 HTTP 隧道功能,XMLSocket 类不能自动穿过防火墙;
   3. 因为是使用套接口,需要设置一个通信端口,防火墙、代理服务器也可能对非 HTTP 通道端口进行限制;

不过这种方案在一些网络聊天室,网络互动游戏中已得到广泛使用。

Java Applet 套接口

在客户端使用 Java Applet,通过 java.net.Socket 或 java.net.DatagramSocket 或 java.net.MulticastSocket 建立与服务器端的套接口连接,从而实现“服务器推”。

这种方案最大的不足在于 Java applet 在收到服务器端返回的信息后,无法通过 JavaScript 去更新 HTML 页面的内容。

基于 HTTP 长连接的“服务器推”技术

Comet 简介
  下面将介绍两种 Comet 应用的实现模型。
基于 AJAX 的长轮询(long-polling)方式
  AJAX 的出现使得 JavaScript 可以调用 XMLHttpRequest 对象发出 HTTP 请求,JavaScript 响应处理函数根据服务器返回的信息对 HTML 页面的显示进行更新。使用 AJAX 实现“服务器推”与传统的 AJAX 应用不同之处在于:

1. 服务器端会阻塞请求直到有数据传递或超时才返回。
   2. 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
   3. 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所 有的信息取回。
  因为这种方案基于 AJAX,具有以下一些优点:请求异步发出;无须安装插件;IE、Mozilla FireFox 都支持 AJAX。
  Mozilla Firefox 提供了对Streaming AJAX 的支持, 即 readystate 为 3 时(数据仍在传输中),客户端可以读取数据,从而无须关闭连接,就能读取处理服务器端返回的信息。IE 在 readystate 为 3 时,不能读取服务器返回的数据,目前 IE 不支持基于 Streaming AJAX。

基于 Iframe 及 htmlfile 的流(streaming)方式
  通过在 HTML 页面里嵌入一个隐蔵帧,然后将这个隐蔵帧的 SRC 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。
  每次数据传送不会关闭连接,连接只会在通信出现错误时,或是连接重建时关闭(一些防火墙常被设置为丢弃过长的连接, 服务器端可以设置一个超时时间, 超时后通知客户端重新建立连接,并关闭原来的连接)。
  用 iframe 请求一个长连接有一个很明显的不足之处:IE、Morzilla Firefox 下端的进度栏都会显示加载没有完成,而且 IE 上方的图标会不停的转动,表示加载正在进行。Google 的天才们使用一个称为“htmlfile”的 ActiveX 解决了在 IE 中的加载显示问题,并将这种方法用到了 gmail+gtalk 产品中。

使用 Comet 模型开发自己的应用

上面介绍了两种基于 HTTP 长连接的“服务器推”架构,更多描述了客户端处理长连接的技术。对于一个实际的应用而言,系统的稳定性和性能是非常重要的。将 HTTP 长连接用于实际应用,很多细节需要考虑。

不要在同一客户端同时使用超过两个的 HTTP 长连接
  HTTP 1.1 规范中规定,客户端不应该与服务器端建立超过两个的 HTTP 连接, 新的连接会被阻塞。

服务器端的性能和可扩展性
  但是 AJAX 的应用使请求的出现变得频繁,而 Comet 则会长时间占用一个连接,上述的服务器模型会变得非常低效,甚至可能会阻塞新的连接。

控制信息与数据信息使用不同的 HTTP 连接
使用长连接时,存在一个很常见的场景:客户端网页需要关闭,而服务器端还处在读取数据的堵塞状态,客户端需要及时通知服务器端关闭数据连接。服务器在收到 关闭请求后首先要从读取数据的阻塞状态唤醒,然后释放为这个客户端分配的资源,再关闭连接。
所以在设计上,我们需要使客户端的控制请求和数据请求使用不同的 HTTP 连接,才能使控制请求不会被阻塞。
在客户和服务器之间保持“心跳”信息
在浏览器与服务器之间维持一个长连接会为通信带来一些不确定性:因为数据传输是随机的,客户端不知道何时服务器才有数据传送。服务器端需要确保当客户端不 再工作时,释放为这个客户端分配的资源,防止内存泄漏。因此需要一种机制使双方知道大家都在正常运行。在实现上:
   1. 服务器端在阻塞读时会设置一个时限,超时后调用会返回,同时发给客户端没有新数据到达的心跳信息。
   2. 经过某个时限没有收到客户端的再次请求,会认为客户端不能正常工作,会释放资源。
   3. 当服务器出现异常,需要通知客户端,同时释放资源。

Pushlet - 开源 Comet 框架
Pushlet 是一个开源的 Comet 框架,在设计上有很多值得借鉴的地方,对于开发轻量级的 Comet 应用很有参考价值。

观察者模型
Pushlet 使用了观察者模型:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。

客户端 JavaScript 库

pushlet 提供了基于 AJAX 的 JavaScript 库文件用于实现长轮询方式的“服务器推”;还提供了基于 iframe 的 JavaScript 库文件用于实现流方式的“服务器推”。

转载于:https://www.cnblogs.com/tonykan/p/3467054.html

服务器内容推送技术(转)相关推荐

  1. dwr 后台服务器推送技术

    刚才写了一篇<dwr传对象到前台>,现在继续下一个总结点,dwr又一个令人兴奋的技术后台服务器推送技术,需要的包我就不写了 web.xml配置 <servlet>   < ...

  2. 服务器主动推送消息数据给客户端

    1 引言 这个问题第一次是我在实现一个导师的方案的时候所发现的,一开始我需要实现服务器与客户端的密钥协商和数据传递,服务器需要主动分发(推送)密钥给客户端,因为以前没有做过相关编码,后来只能想到用反向 ...

  3. Python Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样实现最方便呢?我这里推荐大家使用GoEasy,它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持we ...

  4. java推送技术_java网络编程 - java服务器推送技术系列方案实战

    前言 服务器推送技术(又名Comet)是建立在ARP基础之上的一种非常实用的技术,它广泛应用于Web端,手机APP应用端等.具体很多场景都需要此技术的支撑,包括扫码登录.扫码支付.网页支付.端到端消息 ...

  5. C# Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持w ...

  6. 长连接/websocket/SSE等主流服务器推送技术比较

    最近做的某个项目有个需求,需要实时提醒client端有线上订单消息.所以保持客户端和服务器端的信息同步是关键要素,对此我们了解了可实现的方式.本文将介绍web常用的几种方式,希望给需要服务器端推送消息 ...

  7. ASP.NET Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用ASP.NET实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEa ...

  8. C# Web实时消息后台服务器推送技术-GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用C#实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

  9. Ruby Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样实现最方便呢?我这里推荐大家使用GoEasy,它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持we ...

最新文章

  1. 疯狂kotlin讲义连载之运算符和表达式——区间运算符
  2. Spring中Bean的后置处理器
  3. python threading_【python标准库学习】thread,threading(一)多线程的介绍和使用
  4. 数组洗牌 Fisher Yates
  5. android message 代码,Android Handler移除Message详解及实例代码
  6. 学习笔记之数据可视化(一)——项目适配方案
  7. 很多人在销售过程中,喜欢考虑用一些话术
  8. ToolStripContainer
  9. JSP中“预定义变量”的使用
  10. Silverlight XPS阅读器,支持分页、查找、全屏、缩放
  11. 电脑重装系统后Win11扬声器无插座信息如何解决?
  12. (新)最新抖音无水印解析原理再分析过程,柳暗花明又一村
  13. 苹果退款_退货与退款 - 购买帮助 - Apple (中国大陆)
  14. Linux 系统下实践 VLAN
  15. Android Browser默认主页网址(验证于KK,L,M,N,O)
  16. 解决MacBook Pro Touch ID失灵不起作用的方法
  17. MySQL数据库乱码(中文变问号)问题解决
  18. 怎么简化学生入校查询健康码和测温的流程-校园健康码查询平台,校园安防平台,家校互动平台
  19. 共享yum资源库下一键安装虚拟机的脚本3【完全自动化】
  20. PMSM直接转矩控制(DTC)

热门文章

  1. 2021年赚钱的建议
  2. 那些兼职中你不知道的事
  3. 如果身价千万,你还会事无巨细亲力亲为吗
  4. 为什么有的安卓手机越用越慢,刷机也不行?
  5. I have to mention the search function at the
  6. Qt4_组装丰富的积木
  7. 里面的自带的字典在哪里_自带话放的声卡“秘密”
  8. 解决正在等待响应_解决一些等待问题
  9. modify sql_在SQL Server中使用JSON_MODIFY()修改JSON数据
  10. 使用“ Row_Number”功能和WHILE循环创建滚动平均值报告