`
gemantic
  • 浏览: 337612 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HTML服务器推送技术简介

 
阅读更多

1. 为什么需要服务器推送?

 

最大的优点:实时

 

适用场景:实时股票价格、商品价格、实时新闻、Twitter/weibo timeline、基于浏览器的聊天系统

 

2. Web交互的发展历程?

 

F5手动刷新 --> AJAX轮询(Polling) --> Comet实时更新 --> HTML5实时通信

 

  随着AJAX的流行,当前大部分网站都采取轮询的方式进行更新,但是这种方式的效率是十分低下的;一方面,服务器端不是总有数据更新,所以每次请求不一定都有更新;另一方面,当发起请求的客户端数量增加,服务器端的接受的请求数量会大量上升,无形中就增加了服务器的压力。

 

  另外,轮询方式的实时性也是不够的,比如基于Web的聊天功能,对实时性要求就很高;于是,comet出现了。Comet是基于HTTP长连接的服务器推送技术,主要有流(streaming)方式和长轮询(long-polling)方式。Comet工作原理:用户发起请求后就挂起,等待服务器返回数据,在此期间不会断开连接。流方式和长轮询方式的区别是:对于流方式,客户端发起连接就不会断开连接,而是由服务器端进行控制。当服务器端有更新时,刷新数据,客户端进行更新;而对于长轮询,当服务器端有更新返回,客户端先断开连接,进行处理,然后重新发起连接。

 

  Comet虽然是一个进步,但是其仍然是单向通信,不能适应Web应用的飞速发展;于是,各种新技术不断涌现,其中WebSocket在Google的力推之下已经成为业界标准,并不断完善中。

 

  下面简单介绍一下Comet的实现方式。

 

3. Comet的实现方式

 

3.1 基于AJAX和基于IFrame的流(streaming)方式


从上图可以看出,每次数据传送不会关闭连接,连接只会在通信出现错误时,或是连接重建时关闭(一些防火墙常被设置为丢弃过长的连接, 服务器端可以设置一个超时时间, 超时后通知客户端重新建立连接,并关闭原来的连接)。

 

3.2 基于AJAX的长轮询(long-polling )方式

 

 

从上图可以看出,客户端发出请求后挂起,服务端在接到请求也挂起,等待有更新时返回数据并断掉连接,然后客户端再发起新的连接

 

4. HTML5实时通信

 

4.1 Server-Sent Event,只支持单向的从服务器到客户端的通道

 

  Server-Sent Events实际上将Comet技术进行了标准化,Server-Sent Events规范“定义了API来打开一个HTTP连接,通过该连接能够获取从服务器推送的通知”

 

  Server-Sent Events包含新的HTML元素EventSource和新的MIME类型 text/event-stream,这个MIME类型定义了事件框架格式

 

  EventSource代表的是接收事件的客户端的终点。客户端通过创建EventSource对象来打开一个event stream。创建EventSource对象时,该对象接收一个事件来源的URL作为其构造函数的参数。当每次收到新的事件数据时onmessage事件处理器会被调用

 

  Server-Sent Event是基于HTTP streaming的。如上所述,response会一直打开,当服务器端有事件发生的时候,事件会被写入response中

 

4.2 WebSocket,基于TCP之上定义了帧协议,支持双向的通信

 

 

  WebSocket 是HTML5一种新的协议。它是实现了浏览器与服务器的双向通讯

 

  在 WebSocket API 中,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送

 

  现在,很多网站为了实现即时通讯,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽和服务器资源。

 

  而比较新的技术去做轮询的效果是Comet,使用了AJAX。但这种技术虽然可达到双向通信,但依然需要发出请求,而且在Comet中,普遍采用了长链接,这也会大量消耗服务器带宽和资源。

 

  面对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。

 

 

5. Comet例子

 

5.1 基于Scala&Lift的实现(略)

 

5.2 基于Nginx&HTTP Push Module(略)

 

 

 

附件是ppt

  • 大小: 16 KB
  • 大小: 12 KB
分享到:
评论
1 楼 FengZiIT 2016-09-07  
既想支持低版本IE浏览器如IE6,又想使用websocket作为技术支持怎么办呢?使用GoEasy推送就可以满足,它是结合了websocket 和polling两种通信方式的一款稳定高效的推送服务。实例参考博客:http://www.cnblogs.com/jishaochengduo/articles/5552645.html

相关推荐

    实现 Dwr 服务器推送

    DWR (Direct Web Remoting) 是一种开源的Java库,用于在Web应用...同时,随着WebSocket等技术的发展,DWR的服务器推送功能可能逐渐被取代,但在一些老项目或对兼容性有较高要求的场景下,DWR仍然是一种有效的解决方案。

    Web实时消息后台服务器推送技术GoEasy(支持多语言)---附GoEasy web 推送实例

    GoEasy是一个优秀的后台服务器推送技术,它支持多种编程语言,使得开发人员能够轻松地在他们的Web应用中实现双向通信功能。在本篇文章中,我们将深入探讨GoEasy的核心特性、工作原理以及如何使用GoEasy进行Web推送。...

    JAVA整合WebSocket实现服务器消息推送项目源码

    WebSocket是Web应用中实现双向通信的关键技术,它允许服务器主动向客户端推送数据,极大地提高了实时性。本项目源码展示了如何使用Java进行WebSocket的整合,从而实现服务器消息推送功能。以下将详细介绍WebSocket的...

    springMVC+dwr技术实现消息推送实例

    5. **事件处理:** 当服务器推送消息时,JavaScript会接收到通知,然后根据需求更新页面或者触发其他客户端事件。 6. **安全性和优化:** 考虑到性能和安全性,可能需要限制长连接的数量,进行连接管理和超时处理,...

    java comet服务器推送使用步骤

    在现代Web开发中,实时数据推送技术已经成为不可或缺的一部分。Comet作为一种实现服务器向客户端推送数据的技术方案,在早期的Web应用中扮演了重要的角色。Java Comet框架为开发者提供了一种简单而有效的方式来实现...

    HBuilder封装APP集成推送DEMO.zip

    本文将详细探讨如何使用HBuilder封装APP并集成推送功能,同时涵盖C#服务器端的推送DEMO实现。 一、HBuilder封装APP集成推送基础 1. HBuilder简介:HBuilder是由DCloud(数字天堂)开发的一款基于Web技术的多端开发...

    web系统消息实时推送

    传统的轮询方法已经不能满足高效、低延迟的通信需求,因此新兴的消息推送技术逐渐成为了解决方案之一。本文将深入探讨如何利用HTML5中的WebSocket协议来实现实时消息推送功能。 #### 二、WebSocket简介 WebSocket...

    PHP使用WebSwoole来实现消息推送.pdf

    文章最后总结了使用 WebSwoole 实现消息推送的技术优势,包括高性能、可扩展、实时推送等特点。 知识点: 1. Socket 的概念和应用 2. WebSwoole 的简介和消息推送功能 3. WebSocket 的概念和应用 4. 使用 ...

    在 Asp.NET MVC 中使用 SignalR 实现推送功能

    在*** MVC中使用SignalR实现推送功能的知识点主要包括...通过以上的知识点介绍,我们可以了解到SignalR在*** MVC中的应用不仅提高了实时通信的效率和便捷性,还为开发者提供了一种实现服务器推送功能的现代化解决方案。

    java消息推送demo,自动选择websocket,兼容IE低版本

    Java消息推送技术在现代Web应用中扮演着重要角色,它使得服务器能够实时地向客户端发送数据,而无需客户端持续发起请求。WebSocket协议是实现双向通信的一种标准,它极大地提高了效率,降低了延迟。然而,WebSocket...

    如何通过RTSP将流推送(push)给Wowza Stream Engine 4

    **推送直播流**:使用支持RTSP推送技术的编码器进行推流。 - 输入主机地址`[wowza-ip-address]:1935`。 - 设置流名`live/myStream.sdp`。 5. **播放直播流**: - 使用Adobe Flash Player通过RTMP协议播放直播流...

    Flex技术简介PPT

    BlazeDS是Adobe提供的一个开源服务器端项目,它允许Flex客户端与Java后端进行双向通信,实现AMF(Action Message Format)数据交换,提供实时的远程方法调用(RPC)和消息推送服务。 8. Flex与移动设备 随着Adobe...

    Asp.NET MVC中使用SignalR实现推送功能

    它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送请求或使用轮询技术来获取消息。 可访问其官方网站:https://github.com/SignalR/ 获取更多资讯。  二、Asp.net SignalR ...

    videojs源码rtmp推流hls播放器html5原生态播放器可用

    RTMP(Real Time Messaging Protocol)是一种实时传输协议,常用于直播流媒体的推送。在videojs中,可以通过第三方插件如videojs-flash来实现RTMP的推流。首先,确保安装了videojs和videojs-flash,然后在HTML中设置...

    nodejs-push-notification-server:一个使用 nodejs 构建的简单推送通知服务器

    在本文中,我们将深入探讨如何使用Node.js构建一个简单的推送通知服务器,特别是在提及的项目"nodejs-push-notification-server"中。这个项目利用了Node.js的灵活性和Socket.IO的强大功能,以便实现实时、双向的通信...

    html5简介和简单的使用方法

    HTML5增强了实时通信能力,通过`WebSocket`和`Server-Sent Events`等技术实现了服务器向客户端推送数据的能力,这为实时聊天、在线游戏等场景提供了技术支持。 ##### 5. 网页多媒体特性(Class: MULTIMEDIA) ...

    tomcat+comet实现终端与服务端同步的小例子

    总结来说,"Tomcat+Comet实现终端与服务端同步的小例子"是一个学习实时通信和服务器推送技术的好起点。通过这个例子,开发者可以了解如何利用现有Web服务器的特性,创建高效、实时的Web应用。同时,这也是对传统HTTP...

    基于WAP的校友通讯录模块的设计和实现

    尽管推送技术在传统Web网络中也有应用,但由于其及时性不足,未能取得显著成效。然而,WAP结合移动网络和推送技术的特点,能够更及时地将信息送达用户手中。 ##### 3. WML语言 WML(Wireless Markup Language,...

Global site tag (gtag.js) - Google Analytics