1、HTML5服务器推送事件介绍

服务器推送事件(Server-sent Events)是Html5规范的一个组成部分,可以用来从服务端实时推送数据到浏览器端。

传统的服务器推送技术----WebSocket: WebSocket规范是HTML5的一个重要组成部分,已经被很多主流浏览器支持,也有不少基于WebSocket开发的应用。正如名称所表示的一样,WebSocket使用的是套接字连接,基于TCP协议。使用WebSocket之后,实际在服务器端和浏览器端建立了一个套接字连接,可以进行双向的数据传输。WebSocket功能是很强大的,使用起来也很灵活,可以适用于不同的场景。不过WebSocket技术也比较复杂,包括服务器端和浏览器端的实现都不同于一般的Web应用。

----HTTP协议:简易轮询,即浏览器端定时向服务器端发起请求,来查询是否有数据需要更新。这种做法比较简单,可以在一定程度上解决问题。不过对于轮询的时间间隔需要进行仔细考虑,间隔过长,会导致用户不能及时收到更新的数据;间隔过短,会导致查询请求过多,增加服务器端的负担。

2、HTML5服务器推送事件实现

1)服务器代码头:header('Content-Type: text/event-stream')

2)EventSource事件: onopen----服务器的链接被打开    onmessage----接收消息     onerror----错误发生

首先下载phpstorm并安装,在windows下,由于phpstorm没有自带Interpreter,因此,在http://php.net下载相应的文件,并在phpstorm中配置好,端口设置为9090。

php文件命名为index.php,

 <?php
 header('Content-Type:text/event=stream');

 echo "hello world";

在浏览器中输入:localhost:9090/index.php,页面即可显示 hello world

帮助文档地址:https://developer.mozilla.org

一个例子(运行php服务器,在浏览器中输入:localhost:9090/index.html):

index.html:

 <!DOCTYPE html>
 <html>
 <head>
     <title></title>
     <script src="index.js"></script>
 </head>
 <body>
 <h1>Status:</h1>
 <div id="statusDiv"></div>
 <h1>Server Data:</h1>
 <div id="serverData"></div>
 </body>
 </html>

index.php:

 <?php
 header('Content-Type:text/event-stream');

 for($i = 0; $i<100;$i++){
     date_default_timezone_set("Asia/Shanghai");
     echo "event:newDate\n";
     echo 'data:'.date('Y-m-d H-i-s');
     echo "\n\n";
     flush();
     sleep(1);
 }

index.js:

 var serverData,statusDiv;
 var SERVER_URL = "index.php";

 window.onload = function(){
     serverData = document.getElementById("serverData");
     statusDiv = document.getElementById("statusDiv");
     startlistenServer();
 }

 function startlistenServer(){
     statusDiv.innerHTML = "start Connect Server...";
     var es = new EventSource(SERVER_URL);
     es.addEventListener("newDate",newDateHandler);
     es.onopen =openHandler;
     es.onerror = errorHandler;
     es.onmessage = messageHandler;
 }

 function openHandler(e){
     statusDiv.innerHTML="Server open";
 }

 function errorHandler(e){
     statusDiv.innerHTML="Error";
 }

 function messageHandler(e){
     serverData.innerHTML = e.data;
 }

 function newDateHandler(e){
     serverData.innerHTML = e.data;
 }

[html5] 学习笔记-服务器推送事件的更多相关文章

  1. HTML5 服务器推送事件(Server-sent Events)实战开发

    转自:http://www.ibm.com/developerworks/cn/web/1307_chengfu_serversentevent/ http://www.ibm.com/develop ...

  2. web前端学习(二)html学习笔记部分(8)--服务器推送事件3

    1.2.22  html5服务器推送事件 1.2.22.1  html5服务器推送事件介绍 服务器推送事件(Server-sent Events)是HTML5规范中的一个组成部分,可以用来从服务器端实 ...

  3. SSE技术详解:一种全新的HTML5服务器推送事件技术

    前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...

  4. C# 实现HTML5服务器推送事件

    为什么需要服务器推送事件: 因为如果需要保持前台数据的实时更新例如,IM聊天,股票信息, 1.可以在客户端不断地调用服务端的方法来获得新数据,但是这样会很消耗服务器资源,导致系统变慢! 2 html5 ...

  5. HTML5 服务器推送事件(Server-sent Events)

    服务器推送事件(Server-sent Events)WebSocket 协议的一种服务器向客户端发送事件&数据的单向通讯.目前所有主流浏览器均支持服务器发送事件,当然除了 Internet ...

  6. SSE:服务器推送事件

    SSE:Server-Sent Event,服务器推送事件 常规的Http协议是一个请求对应一个响应的这种方式的 但对于某些实时性要求比较高的需求,HTML5中新增了SSE,可以很方便的实现局部数据的 ...

  7. springweb flux 服务器推送事件

    以前做服务器推送一般用轮询,后端主动给客户端推送不是很好解决.有时候也可以采用websocket 现在看了springwebflux,用它自带的方法做服务器推送方便多了. 代码如下: import o ...

  8. HTML5服务器推送事件

    目前客户端(浏览器)和服务端交互大致有以下几种方式: 1)form表单提交方式,适合访问量不大,对用户体验要求不高的web系统开发,或者页面整体刷新无伤大雅的场合,通信方向是客户端提交给服务端,是客户 ...

  9. HTML5中的服务器‘推送’技术 -Server-Sent Events

    转帖:http://www.developersky.net/thread-63-1-1.html 一直以来,HTTP协议都是严格遵循Request-Response模型的.客户端发送一个Reques ...

随机推荐

  1. IT人常用的网站

    一.网页设计类 蓝色理想 http://www.blueidea.com 网页设计师联盟 http://www.68design.net 网页设计大本营 http://www.code-123.com ...

  2. C# 开发系列(二)

    1. 参考文档:http://www.yiibai.com/csharp/csharp_environment_setup.html 2. C# ,ASP.NET HTTP Authorization ...

  3. 用 JS 点击左右按钮 使图片切换 - 最精简版-ljx2380000-ChinaUnix博客

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  4. 使用RGBa和Filter实现不影响子元素的CSS透明背景

    点击查看原文 问题 如果我们想要一个元素拥有半透明的背景,我们有两个选择: 使用CSS和 opacity 做一张 24-bit PNG 背景图片 在CSS中使用opacity有两个问题,一是为了适应所 ...

  5. jsoncpp第二篇------API

    更多API参考jsoncpp头文件 1  jsoncpp的api简要说明 1,解析(json字符串转为对象) std::string strDataJson; Json::Reader JReader ...

  6. css padding和margin的百分比

    前段时间我同事对于margin和padding应用百分比值似乎有些误解,觉得可能是个普遍问题,所以觉得有必要拿出来单独写一下. margin和padding都可以使用百分比值的,但有一点可能和通常的想 ...

  7. iOS开发——NSDate(待续...)

    1.获取当前系统时间,毫秒级 - (void)viewDidLoad { [super viewDidLoad]; NSString *currentTime = [self getCurrentTi ...

  8. leetcode--007 word break I

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+4AAAC5CAIAAAA55fI7AAAZa0lEQVR4nO3dPW7bQIMG4L2MT6B7+A

  9. ul中li分列显示

    让ul中li分列显示,用li显示两列如下(要显视多列的自己想办法,哈哈): 2列 <ul> <li style="display:block;float:left;widt ...

  10. UVa 11631 - Dark roads

    题目大意:政府为了减小开支决定关闭一些路灯,同时保证照亮的路能连接所有路口. 又是一个MST问题,Kruskal算法,不过数据规模比较大,又Submission Error了...扔这吧... #in ...