今天研究了一下HTML5的服务器发送事件。
http://www.w3school.com.cn/html5/html_5_serversentevents.asp
所谓的服务器单向发送功能,通过用HttpFox的检测,发现仍然是在客户端做轮询
直接使用W3School的代码,作用为从服务器端(demo_sse.php)获取时间,并显示在demo.html中
demo.html
获得服务器更新
if(typeof(EventSource)!=="undefined")
{
var source=new EventSource("/demo_sse.php");
source.onmessage=function(event)
{
document.getElementById("result").innerHTML+=event.data + "
";
};
}
else
{
document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events...";
}
待访问的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();
通过httpfox进行http的跟踪
可以看出,无非是浏览器自己开了个线程,对服务器进行轮询。
之后又研究了一下长连接功能,发现
1.使用http1.1的块传输模式;
2.在被访问页面使用死循环,Hold住动态页面,并使用Flush来保证不需要执行完脚本即时反馈给页面;