热门标签 | 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…


推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文详细介绍了解决全栈跨域问题的方法及步骤,包括添加权限、设置Access-Control-Allow-Origin、白名单等。通过这些操作,可以实现在不同服务器上的数据访问,并解决后台报错问题。同时,还提供了解决second页面访问数据的方法。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
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社区 版权所有