您当前的位置 :首页 > 学习资料 > HTML5 服务器发送事件(Server-Sent Events)
投稿

HTML5 服务器发送事件(Server-Sent Events)

2021-03-21 23:37:53 来源: 作者: 责任编辑:cncml

HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新。


Server-Sent 事件 - 单向消息传递
Server-Sent 事件指的是网页自动获取来自服务器的更新。
以前也可能做到这一点,前提是网页不得不询问是否有可用的更新。通过服务器发送事件,更新能够自动到达。
例子:Facebook/Twitter 更新、股价更新、新的博文、赛事结果等。


接收 Server-Sent 事件通知
EventSource 对象用于接收服务器发送事件通知:
  1. var source=new EventSource("demo_sse.php");
  2. source.onmessage=function(event)
  3. {
  4.     document.getElementById("result").innerHTML+=event.data + "<br>";
  5. };
复制代码
实例解析:
  • 创建一个新的 EventSource 对象,然后规定发送更新的页面的 URL(本例中是 "demo_sse.php")
  • 每接收到一次更新,就会发生 onmessage 事件
  • 当 onmessage 事件发生时,把已接收的数据推入 id 为 "result" 的元素中

检测 Server-Sent 事件支持
以下实例,我们编写了一段额外的代码来检测服务器发送事件的浏览器支持情况:

  1. if(typeof(EventSource)!=="undefined")
  2. {
  3.     // 浏览器支持 Server-Sent
  4.     // 一些代码.....
  5. }
  6. else
  7. {
  8.     // 浏览器不支持 Server-Sent..
  9. }
复制代码

服务器端代码实例
为了让上面的例子可以运行,您还需要能够发送数据更新的服务器(比如 PHP 和 ASP)。
服务器端事件流的语法是非常简单的。把 "Content-Type" 报头设置为 "text/event-stream"。现在,您可以开始发送事件流了。
  1. <?php
  2. header('Content-Type: text/event-stream');
  3. header('Cache-Control: no-cache');
  4.  
  5. $time = date('r');
  6. echo "data: The server time is: {$time}\\n\\n";
  7. flush();
  8. ?>
复制代码
ASP 代码 (VB) (demo_sse.asp):
  1. <%
  2. Response.ContentType="text/event-stream"
  3. Response.Expires=-1
  4. Response.Write("data: " & now())
  5. Response.Flush()
  6. %>
复制代码
代码解释:
  • 把报头 "Content-Type" 设置为 "text/event-stream"
  • 规定不对页面进行缓存
  • 输出发送日期(始终以 "data: " 开头)
  • 向网页刷新输出数据

EventSource 对象
在上面的例子中,我们使用 onmessage 事件来获取消息。不过还可以使用其他事件:
事件
描述
onopen 当通往服务器的连接被打开
onmessage 当接收到消息
onerror 当发生错误





 
文章来源: 责任编辑:cncml
版权声明:
1、本主题所有言论和图片纯属会员个人意见,与本网站立场无关
2、本站所有主题由该文章作者发表,该文章作者与享有文章相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和的同意
4、文章作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、管理员和版主有权不事先通知发贴者而删除本文
不良信息举报信箱 新闻热线:18733599993 技术服务:18733599993 网上投稿
关于本站 | 广告服务 | 免责申明 | 招聘信息 | 联系我们
在线网 版权所有 Copyright(C)2005-2025