浅谈html5之sse服务器发送事件EventSource介绍


Posted in HTML / CSS onAugust 28, 2017

前言

我前面文章讲过数据大屏,里面的数据时时更新。还有时时更新的股票数据,Facebook/Twitter 更新、估价更新、新的博文、赛事结果等等,都需要数据时时更新。之前我们一般都是请求服务器,看看有没有可以更新的数据。html5提供了Server-Sent Events方法,通过服务器发送事件,更新能够自动到达。

Server-Sent Events使用

Server-Sent Events使用很简单,通过EventSource 对象来接受服务器端消息。有如下事件:

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

检测 Server-Sent 事件支持

if(typeof(EventSource)!=="undefined")
{
  // 浏览器支持 Server-Sent
  // 一些代码.....
}
else
{
// 浏览器不支持 Server-Sent..
}

接收 Server-Sent 事件通知

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

服务器端代码实例

<?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(); 
?>

链接事件和报错事件都加上

if(typeof(EventSource)!=="undefined")
{
    var source=new EventSource("server.php");
    source.onopen=function()
    {
         console.log("Connection to server opened.");
    };
    source.onmessage=function(event)
    {

        document.getElementById("result").innerHTML+=event.data + "<br>";
    };
    source.onerror=function()
    {
        console.log("EventSource failed.");
    };
}
else
{
    document.getElementById("result").innerHTML="抱歉,你的浏览器不支持 server-sent 事件...";
}

我们会发现,控制台打印如下:

浅谈html5之sse服务器发送事件EventSource介绍

不停的进入链接、和错误,详情请点击

那是因为php代码只是简单的echo,并没有连续输出,我们把上面php代码做如下改进

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

$time = date('r'); 

  $i = 0;
  $c = $i + 100;
  while (++$i < $c) {
    echo "id: " . $i . "\n";
    echo "data: " . $time. ";\n\n";
    ob_flush();
    flush();
    sleep(1);
  }
?>

就不会出现不停错误了!

IE浏览器兼容解决方案

我们知道,IE浏览器并不支持EventSource,有如下解决方案:

引入

eventsource.min.js

就可以完美解决。可以查看其github地址:https://github.com/Yaffle/EventSource 结合nodejs使用也很方便,直接

npm install event-source-polyfill

就可以了。

github地址:https://github.com/confidence68/demoOfSocket/tree/master/serversent

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3中background-clip和background-origin的区别示例介绍
Mar 10 HTML / CSS
纯CSS3实现滚动的齿轮动画效果
Jun 05 HTML / CSS
Css3新特性应用之形状总结
Dec 08 HTML / CSS
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
Dec 30 HTML / CSS
HTML5 FormData 方法介绍以及实现文件上传示例
Sep 12 HTML / CSS
一张图片能隐含千言万语之隐藏你的程序代码
Dec 13 HTML / CSS
为你的html5网页添加音效示例
Apr 03 HTML / CSS
探索HTML5本地存储功能运用技巧
Mar 02 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
Apr 17 HTML / CSS
htnl5利用svg页面高斯模糊的方法
Jul 20 HTML / CSS
浅谈HTML5新增和废弃的标签
Apr 28 HTML / CSS
CSS SandBox应用场景及常见问题
Jun 25 HTML / CSS
HTML5实现可缩放时钟代码
Aug 28 #HTML / CSS
HTML5操作WebSQL数据库的实例代码
Aug 26 #HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
Aug 24 #HTML / CSS
HTML5中的拖放实现详解
Aug 23 #HTML / CSS
html5使用Drag事件编辑器拖拽上传图片的示例代码
Aug 22 #HTML / CSS
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
Aug 18 #HTML / CSS
mui几种页面跳转方式对比总结概括
Aug 18 #HTML / CSS
You might like
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
javascript Select标记中options操作方法集合
2008/10/22 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
python通过pip更新所有已安装的包实现方法
2017/05/19 Python
Python编程之string相关操作实例详解
2017/07/22 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
python自动识别文本编码格式代码
2019/12/26 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
Python grpc超时机制代码示例
2020/09/14 Python
销售行政专员职责
2014/01/03 职场文书
新学期家长寄语
2014/01/19 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
青春飞扬演讲稿
2014/09/11 职场文书
机关作风建设自查报告
2014/10/22 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
英语教学课后反思
2016/02/15 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js
react antd实现动态增减表单
2021/06/03 Javascript
python中__slots__节约内存的具体做法
2021/07/04 Python