HTML 教程
1. HTML 教程 2. HTML 简介 3. HTML 编辑器 4. HTML 基础 5. HTML 元素 6. HTML 属性 7. HTML 标题 8. HTML 段落 9. HTML 文本格式化 10. HTML 链接 11. HTML 头部 12. HTML CSS 13. HTML 图像 14. HTML 表格 15. HTML 列表 16. HTML 区块 17. HTML 布局 18. HTML 表单 19. HTML 框架 20. HTML 颜色 21. HTML 颜色名 22. HTML 颜色值 23. HTML 脚本 24. HTML 字符实体 25. HTML URL 26. HTML 速查列表 27. HTML 总结 28. XHTML 简介 29. HTML5 教程 30. HTML5 新元素 31. HTML5 Canvas 32. HTML5 内联 SVG 33. HTML5 拖放 34. HTML5 地理定位 35. HTML5 Video(视频) 36. HTML5 Audio(音频) 37. HTML5 Input 类型 38. HTML5 表单元素 39. HTML5 表单属性 40. HTML5 语义元素 41. HTML5 Web 存储 42. HTML5 应用程序缓存 43. HTML5 Web Workers 44. HTML5 服务器发送事件(Server-Sent Events) 45. HTML 媒体(Media) 46. HTML 插件 47. HTML 音频(Audio) 48. HTML 视频(Video)播放 49. HTML 实例

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

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


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


Server-Sent 事件 - 单向消息传递

Server-Sent 事件指的是网页自动获取来自服务器的更新。

以前也可能做到这一点,前提是网页不得不询问是否有可用的更新。通过服务器发送事件,更新能够自动到达。

例子:Facebook/Twitter 更新、股价更新、新的博文、赛事结果等。


浏览器支持

所有主流浏览器均支持服务器发送事件,除了 Internet Explorer。


接收 Server-Sent 事件通知

EventSource 对象用于接收服务器发送事件通知:

实例

var source=new EventSource("demo_sse.php"); source.onmessage=function(event) { document.getElementById("result").innerHTML+=event.data + "<br>"; };

55面试教程网 »

实例解析:

  • 创建一个新的 EventSource 对象,然后规定发送更新的页面的 URL(本例中是 "demo_sse.php")
  • 每接收到一次更新,就会发生 onmessage 事件
  • 当 onmessage 事件发生时,把已接收的数据推入 id 为 "result" 的元素中

检测 Server-Sent 事件支持

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

if(typeof(EventSource)!=="undefined")

{

    // 浏览器支持 Server-Sent

    // 一些代码.....

}

else

{

    // 浏览器不支持 Server-Sent..

}


服务器端代码实例

为了让上面的例子可以运行,您还需要能够发送数据更新的服务器(比如 PHP 和 ASP)。

服务器端事件流的语法是非常简单的。把 "Content-Type" 报头设置为 "text/event-stream"。现在,您可以开始发送事件流了。

实例

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

$time date('r');
echo 
"data: The server time is: {$time}\n\n";
flush();
?>

ASP 代码 (VB) (demo_sse.asp):

<%

Response.ContentType="text/event-stream"

Response.Expires=-1

Response.Write("data: " & now())

Response.Flush()

%>

代码解释:

  • 把报头 "Content-Type" 设置为 "text/event-stream"
  • 规定不对页面进行缓存
  • 输出发送日期(始终以 "data: " 开头)
  • 向网页刷新输出数据

EventSource 对象

在上面的例子中,我们使用 onmessage 事件来获取消息。不过还可以使用其他事件:

事件 描述
onopen 当通往服务器的连接被打开
onmessage 当接收到消息
onerror 当发生错误