zoukankan      html  css  js  c++  java
  • 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 "
    
    ";
    flush();
    */
    header('Content-Type:text/event-stream');
    /*不带上面这一行的话打印
    没有反应,不会换行*/
    for($i = 0; $i < 100;$i++){
        date_default_timezone_set("Asia/Shanghai");
    //    时区设置;
        echo "event:newDate
    ";
        echo 'data:'.date('Y-m-d H-i-s');
        echo "
    
    ";
        flush();
        sleep(1);
    }
  • 相关阅读:
    转载:CentOS7下部署Django项目详细操作步骤
    转载 js弹出框、对话框、提示框、弹窗总结
    python 博客开发之散乱笔记
    python 用 PIL 模块 画验证码
    RL
    c++ 基础知识 0001 const 知识2
    c++ 基础知识 0001 const 知识1
    神经网络的理论基础
    go set up on ubuntu
    ubuntu 上查看文件的内容,二进制形式展现
  • 原文地址:https://www.cnblogs.com/foreverlin/p/10011549.html
Copyright © 2011-2022 走看看