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的更多相关文章

  1. [html5] 学习笔记-服务器推送事件

    1.HTML5服务器推送事件介绍 服务器推送事件(Server-sent Events)是Html5规范的一个组成部分,可以用来从服务端实时推送数据到浏览器端. 传统的服务器推送技术----WebSo ...

  2. Nginx 学习笔记(十)介绍HTTP / 2服务器推送(译)

    原文地址:https://www.nginx.com/blog/nginx-1-13-9-http2-server-push/ 我们很高兴地宣布,2018年2月20日发布的NGINX 1.13.9支持 ...

  3. Web前端与移动开发学习路线图

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 这里整理的Web前端与移动开发学习路线图包含初中级两个部分,你可以通过百度云盘下载观看对应的视频 链接: http://pan.ba ...

  4. 想做web前端project师应该学习些什么?

    偶然间看到这篇文章.感觉博主写的挺不错的,假设你想做web前端project师的话,建议您阅读下面这篇文章,事实上web前端project师所做的工作事实上就是站点设计,有些小公司的美工事实上就是做w ...

  5. 最全的WEB前端开发程序员学习清单

    史上最全的WEB前端开发程序员学习清单! 今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我 ...

  6. 前端通信:SSE设计方案(二)--- 服务器推送技术的实践以及一些应用场景的demo(包括在线及时聊天系统以及线上缓存更新,代码热修复案例)

    距离上一篇博客,这篇文章的发布大概过了整整三个月.我也从饿了么度过了试用期,成为了正式员工.刚进来恰好遇到项目底层改造和迁移,将项目从angular全部迁移到vue上,所以适应这边的节奏和业务的开发任 ...

  7. Web端服务器推送技术原理分析及dwr框架简单的使用

    1 背景 “服务器推送技术”(ServerPushing)是最近Web技术中最热门的一个流行术语.它是继“Ajax”之后又一个倍受追捧的Web技术.“服务器推送技术”最近的流行跟“Ajax ”有着密切 ...

  8. PHP Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

  9. Ruby Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...

随机推荐

  1. jeecms v9 vue环境搭建

    一.安装NODEJS运行环境 前往nodejs官网下载nodejs,https://nodejs.org/en/ ,建议下载最新稳定版的,下载后安装即可,下载选择类似如下 安装完毕之后,在cmd中输入 ...

  2. Cesium官方教程7--三维模型

    原文地址:https://cesiumjs.org/tutorials/3D-Models-Tutorial/ 三维模型 (3D Models) 这篇教程给大家介绍,如何在Cesium中通过Primi ...

  3. window查看端口信息

    netstat -nao |findstr "2129" 列出所有端口的情况 tasklist|findstr "pid" 查看对应进程信息

  4. 02_Spring Bean的装配模式_基于XML配置方式

    一.三种实例化Bean的方式 1.使用类构造器实例化(默认无参数) <bean id="bean1" class="com.demo1.Bean1"> ...

  5. Python学习day39-并发编程(各种锁)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  6. C# 判断当前请求是GET、还是POST ?

    方法一: HttpContext.Current.Request.RequestType == "POST"   //当前请求为:POST 方法二: if(Request.Serv ...

  7. php从5.6升级到php7后,扩展出现segment fault的问题解决

    php7的文档中有这样的描述: Both mistakes might cause memory corruptions and segfaults:1)char *str;long str_len; ...

  8. 【心无旁骛】vuex-typescript-example

    我不惮以最大的赞美去赞美这样的项目,真的是非常有创意又有能力. 先放上我喜欢的这个项目的开源地址:https://github.com/gluons/vuex-typescript-example 我 ...

  9. leetcode 1078 Occurrences After Bigram

    lc1078 Occurrences After Bigram trim().split()将原字符串转换成words数组 依次匹配first和second,若两者都能匹配上,则下一个单词为third ...

  10. Vue 获取dom元素之 ref 和 $refs 详解

    一.$refs 一个对象,持有ref注册过的所有元素或子组件.(注册过的 ref 的集合) 二.ref 被用来给元素或子组件注册引用信息.若用在dom元素上,引用指向的就是dom元素:若用在子组件上, ...