热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

H5ServerSent事件单向消息传递

虽然以前知道这个技术,但是一直没去了解过,今天在这里记录一下,先看W3school说的这意味着可以做一些简单的消息推送下面是我的代码:html页面

虽然以前知道这个技术,但是一直没去了解过,今天在这里记录一下,先看W3school说的

《H5 Server-Sent 事件 - 单向消息传递》
这意味着可以做一些简单的消息推送
下面是我的代码:
html页面



倒计时








js代码:

var source,message,timer;
/**
* 开启签到 - 开始检查服务端是否有更新
*/
$("#open").click(function () {
countdown();
if(typeof(EventSource)!=="undefined") {
source = new EventSource("http://10.3.140.139:8082/index/test/getuser");
source.Onmessage=function(event)//接收到消息
{
message = event.data;
var len = message.length;
if (len > 0) {
message = JSON.parse(message);
$(".handle_message tr").append(code(message['head_pic'],message['username']));
}
};
} else {
layer.msg('抱歉,你的浏览器不支持 server-sent 事件...');
}
});
/**
* 关闭监听
*/
$("#close").click(function () {
cz_close();
});
/**
* 关闭监听操作
*/
function cz_close() {
timer = $(".paging").val();
clearTimeout(timer);
$('#test').html('签到结束');
source.close();
$.post("http://10.3.140.139:8082/index/test/clearcache");
layer.msg('停止监听服务器更新');
}
/**
* 追加代码
* @returns {string}
*/
function code(pic,name) {
var code = '' +
'http://tva2.sinaimg.cn/large/005ucgoIly1g3iiq7a591j30jg0jgwl0.jpg' +
'

'+ name +'

' +
'';
return code;
}
/**
* 倒计时
*/
function countdown() {
layui.use('util', function(){
var util = layui.util,
serverTime = new Date().getTime(),
endTime = serverTime + (2 * (60 * 1000));
util.countdown(endTime, serverTime, function(date, serverTime, timer){
$(".paging").val(timer);
var str = date[2] + '分' + date[3] + '秒';
if (date[0] == 0 && date[1] == 0 && date[2] == 0 && date[3] == 0) {
clearTimeout(timer);//清除定时器
cz_close();
}else {
$('#test').html('剩余时间:'+ str);
}
});
});
}

php代码:

/**
* @return mixed
* 学生端签到页面
*/
public function index()
{
return $this->fetch();
}
/**
* @return mixed
* 教师端开启签到页面
*/
public function demo()
{
return $this->fetch();
}
/**
* 将签到的学生加入缓存
*/
public function post()
{
if ($_POST) {
$img = self::curlInfo();
$_POST['head_pic'] = $img;
$info = json_encode($_POST);
Cache::set('user_info',$info);
}
}
/**
* 缓存取出用户
*/
public function getUser ()
{
//取出并清除当前缓存
$info = Cache::pull('user_info');
////服务端事件标准规定(将MIME类型设为text/event-stream)
header('Content-Type: text/event-stream');
////告诉Web服务器关闭Web缓存
header('Cache-Control: no-cache');
echo "data:{$info}\n\n";
//立即发送数据(而不是先缓冲起来,等到PHP代码执行完毕再发送)
flush();
}
/**
* 清除缓存
*/
public function clearCache ()
{
Cache::clear();
}
/**
* @return mixed
* 获取用户随机头像
*/
protected function curlInfo ()
{
$url = 'https://api.66mz8.com/api/rand.pic.php?type=%E4%B8%AA%E6%80%A7&return=json';
$curl = curl_init();//初始化CURL句柄
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($curl,CURLOPT_HTTPGET,true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
$info = json_decode($output,true);
$img = $info['imgurl'];
return $img;
}

参考链接:http://www.w3school.com.cn/ht…
http://www.hangge.com/blog/ca…


推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
author-avatar
高朗1_114
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有