web前端学习(二)html学习笔记部分(8)--服务器推送事件3
1.2.22 html5服务器推送事件
1.2.22.1 html5服务器推送事件介绍
服务器推送事件(Server-sent Events)是HTML5规范中的一个组成部分,可以用来从服务器端实时推送数据到浏览器端。
传统的服务器端推送数据技术:Websocket:WebSocket规范是HTML5中的一个重要组成部分,已经被很多主流浏览器所支持,也有不少基于WebSocket开发的应用。正如名称所表示的一样,WebSocket使用的是套接字链接,基于TCP协议。使用WebSocket之后,实际上在服务器端和浏览器之间建立起一个套接字连接,可以进行双向的数据传输。WebSocket的功能是很强大的,使用起来灵活,可以适用于不同的场景。不过WebSocket技术也比较复杂,包括服务器端和浏览器端的实现都不同于一般的web应用。
HTTP协议:简易轮询,即浏览器端定时向服务器端发出请求,来查询是否有数据更新。这种做法比较简单,可以在一定程度上解决问题。不过对于轮询的时间间隔需要进行仔细考虑。轮询的间隔过长,会导致用户不能及时接收得到更新的数据;轮询的时间过短,会导致查询请求过多,增加服务器的负担。
1.2.22.2 html5服务器推送事件实现
服务器代码头:
header('Content-Type:text/event-stream');
EventSource事件:
onopen事件:服务器链接被打开
onmessage事件:接受消息
onerror:错误发生
代码记录
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="index.js"></script>
</head>
<body>
<h1>Status:</h1>
<div id="statusDiv"></div>
<h1>Server Data:</h1>
<div id="serverData"></div>
???
</body>
</html>
index.js
var serverData;
var statusDiv;
var SERVER_URL = "index.php";
window.onload = function () {
statusDiv = document.getElementById("statusDiv");
serverData = document.getElementById("serverData");
startlistenServer();
}
function startlistenServer() {
statusDiv.innerHTML = "start connect Server......";
var es = new EventSource(SERVER_URL);
es.addEventListener("newDate",newDateHandler);
//上面一行用来检测php中echo的内容有没有event:newDate,有的话执行函数newDateHandler;
//它其实和onmessage函数有相同的功能在这里都是显示date日期的。 //有用到EventSource的自定义事件的知识
es.onopen = openHandler;
es.onerror = errorHandler;
es.onmessage = messageHandler;
}
function openHandler(e) {
statusDiv.innerHTML = "Server open";
}
function errorHandler(e){
statusDiv.innerHTML = "error";
}
function messageHandler(e){
// serverData.innerHTML = e.data;
// 注释用来测试自定义事件。
// 不注释就是和下面那个函数一个功能,重复功能了。
}
function newDateHandler(e){
serverData.innerHTML = e.data;
}
index.php
<?php
/**
* Created by PhpStorm.
* User: lin
* Date: 2018/11/24
* Time: 10:59
*/
/*
* echo "hello";
echo 'data:'.date("Y-m-d H-i-s");
echo "\n\n";
flush();
*/
header('Content-Type:text/event-stream');
/*不带上面这一行的话打印\n没有反应,不会换行*/
for($i = 0; $i < 100;$i++){
date_default_timezone_set("Asia/Shanghai");
// 时区设置;
echo "event:newDate\n";
echo 'data:'.date('Y-m-d H-i-s');
echo "\n\n";
flush();
sleep(1);
}
web前端学习(二)html学习笔记部分(8)--服务器推送事件3的更多相关文章
- [html5] 学习笔记-服务器推送事件
1.HTML5服务器推送事件介绍 服务器推送事件(Server-sent Events)是Html5规范的一个组成部分,可以用来从服务端实时推送数据到浏览器端. 传统的服务器推送技术----WebSo ...
- Nginx 学习笔记(十)介绍HTTP / 2服务器推送(译)
原文地址:https://www.nginx.com/blog/nginx-1-13-9-http2-server-push/ 我们很高兴地宣布,2018年2月20日发布的NGINX 1.13.9支持 ...
- Web前端与移动开发学习路线图
文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 这里整理的Web前端与移动开发学习路线图包含初中级两个部分,你可以通过百度云盘下载观看对应的视频 链接: http://pan.ba ...
- 想做web前端project师应该学习些什么?
偶然间看到这篇文章.感觉博主写的挺不错的,假设你想做web前端project师的话,建议您阅读下面这篇文章,事实上web前端project师所做的工作事实上就是站点设计,有些小公司的美工事实上就是做w ...
- 最全的WEB前端开发程序员学习清单
史上最全的WEB前端开发程序员学习清单! 今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我 ...
- 前端通信:SSE设计方案(二)--- 服务器推送技术的实践以及一些应用场景的demo(包括在线及时聊天系统以及线上缓存更新,代码热修复案例)
距离上一篇博客,这篇文章的发布大概过了整整三个月.我也从饿了么度过了试用期,成为了正式员工.刚进来恰好遇到项目底层改造和迁移,将项目从angular全部迁移到vue上,所以适应这边的节奏和业务的开发任 ...
- Web端服务器推送技术原理分析及dwr框架简单的使用
1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切 ...
- PHP Web实时消息后台服务器推送技术---GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...
- Ruby Web实时消息后台服务器推送技术---GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...
随机推荐
- 使用jquery的lazy loader插件实现图片的延迟加载
当网站上有大量图片要展示的话,如果一次把所有的图片都加载出来的话,这势必会影响网站的加载速度,给用户带来比较差的体验.通过使用jquery的lazy loader插件可以实现图片的延迟加载,当网页比较 ...
- java-学习网站推荐
技术博客: http://c.biancheng.net/view/1390.html (设计模式等等应有尽有,最全教程,强烈推荐!!!) hutool:http://hutool.mydoc.io/ ...
- adb环境部署及与模拟器的连接
1.下载adt-bundle-windows-x64安装包,下载网址https://www.7down.com/soft/293453.html 2.对安装包进行解压缩 3.配置环境变量,将adb的路 ...
- Free- Linux必学的60个命令
1.作用 free命令用来显示内存的使用情况,使用权限是所有用户. 2.格式 free [-b|-k|-m] [-o] [-s delay] [-t] [-V] 3.主要参数 -b -k -m:分别以 ...
- C/C++常考基础面试题(更新)
题目来自牛客网 解析部分来自牛客网 https://www.nowcoder.com/4685265 一 分析下面代码有什么问题? void test1() { char string[10]; ch ...
- 模板:exlucas
求$C_n^m mod p$,其中p不是质数且不保证p能分解为几个不同质数的乘积(也就是不能用crt合并) #include<iostream> #include<cstdio> ...
- HZOI20190810 T1
A:blue(青蛙乱跳) 好像很多人都是用的队列?甚至还有用set 然而...博主太蒻了,只能找一个sb的规律 我们来手模一个样例: 10 9 16 30 2 4 6 9 11 15 18 19 25 ...
- 大牛就别进来了.npm --save-dev --save 的区别
--save-dev 是你开发时候依赖的东西,--save 是你发布之后还依赖的东西. 比如,你写 ES6 代码,如果你想编译成 ES5 发布那么 babel 就是devDependencies.如果 ...
- 同名的cookie会不会存在多个
cookie new了多个.同一个名字.会不会存在多个呢. //若果不设置Cookie的path,则名字相同的Cookie视为相同的Cookie,后面的覆盖前面的,注意:大小写敏感 Cookie c1 ...
- nginx 访问ssl 的 pem 遇到的权限问题
nginx 开启失败,日志记录 访问 ssl 的 pem 文件 fopen:Permission denied 权限问题,查看文件权限,目录权限,正常. google 后得知原来是一个 SELinu ...