HTML5 上交引擎


HTML5 伺服器傳送事件(Server-Sent Events)


#HTML5 伺服器發送事件(server-sent event)允許網頁取得來自伺服器的更新。


Server-Sent 事件 - 單向訊息傳遞

Server-Sent 事件指的是網頁自動取得來自伺服器的更新。

以前也可能做到這一點,前提是網頁必須詢問是否有可用的更新。透過伺服器發送事件,更新能夠自動到達。

範例:Facebook/Twitter 更新、估價更新、新的部落格文章、賽事結果等。


瀏覽器支援

Internet Explorer

所有主流瀏覽器皆支援伺服器傳送事件,除了 Internet Explorer。


接收Server-Sent 事件通知

EventSource 物件用於接收伺服器傳送事件通知:

實例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<h1>获取服务端更新数据</h1>
<div id="result"></div>

<script>
if(typeof(EventSource)!=="undefined")
{
	var source=new EventSource("demo_sse.php");
	source.onmessage=function(event)
	{
		document.getElementById("result").innerHTML+=event.data + "<br>";
	};
}
else
{
	document.getElementById("result").innerHTML="抱歉,你的浏览器不支持 server-sent 事件...";
}
</script>

</body>
</html>

運行實例»

點擊"運行實例"按鈕查看線上實例

#實例解析:

  • 創建一個新的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"

  • 規定不對頁面進行快取


EventSource 物件在上面的例子中,我們使用onmessage 事件來取得訊息。不過還可以使用其他事件:
輸出傳送日期(永遠以"data: " 開頭)
向網頁重新整理輸出資料
事件描述
onopen
####當通往伺服器的連線被開啟############onmessage######當接收到訊息############onerror######當發生錯誤###############