搜索
系统检测到您的用户名不符合规范:

服务器推送数据到客户端(可做直播)

浏览:6397 发布日期:2013年12月31日 分类:功能实现 关键字: 直播 推送
服务器推送数据到客户端,可实现直播或者一些其他特殊需求。。。(类似每次苹果大会还有爱范儿直播那种东西。如果拿ajax 去定时查询的太累了,实现原理comet 技术)甚至可以执行js css 等代码~

后台前端部分代码~ function send(msg){
$.ajax({
data : {'msg' : msg},
type : 'post',
url : '{:U('Live/SendMsg')}',
success : function(response){
//alert(response);;
}
})
}
$(document).ready(function(){
connect();
$("#btn").click(function(){
var msg = $('#msg').val();
send(msg);
msg.html('');
});
})
public function SendMsg(){

$filename = './Uploads/live/'.'data.json';
if ($_POST['msg']!='') {
file_put_contents($filename,$_POST['msg']);
$this->ajaxReturn($_POST,'OK',100);
die();
}else{
$this->ajaxReturn($_POST,'on',0);
die();
}

}
前台展示部分: <div id="infobox" >
1.请输入推送信息,可同时执行多条信息和JavaScript指令,每行一条<br/></div>
var timestamp = 0;
var url = '/live.php';
var error = false;
function connect(){
$.ajax({
data : {
'timestamp' : timestamp
},
url : url,
type : 'get',
timeout : 0,
success : function(response){
var data = eval('('+response+')');
error = false;
timestamp = data.timestamp;
if (data.msg!='')
{
$("#infobox").append(data.msg + '<br>');
};

},
error : function(){
error = true;
setTimeout(function(){ connect();}, 5000);
},
complete : function(){
if (error)
// if a connection problem occurs, try to reconnect each 5 seconds
setTimeout(function(){connect();}, 5000);
else
connect();
}
})
}
$(document).ready(function(){
connect();
})
推送模块代码:<?php
$filename = './Uploads/live/'.'data.json';
// $msg = isset($_GET['msg']) ? $_GET['msg'] : '';
// 不停的循环,直到储存消息的文件被修改
$lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
$currentmodif = filemtime($filename);
while ($currentmodif <= $lastmodif){ // 如果数据文件已经被修改
usleep(100000); // 100ms暂停 缓解CPU压力
clearstatcache(); //清除缓存信息
$currentmodif = filemtime($filename);
}
// 返回json数组
$response = array();
$response['msg'] = file_get_contents($filename);
$response['timestamp'] = $currentmodif;
echo json_encode($response);
//$this->ajaxReturn($response,'ok',1);
flush();
?>


现在有个bug 好像是属于tp 内核的吧?在前端页面执行过推送,在去点tp 框架里面其他功能会变得很卡,大概卡顿30秒左右不知道是什么原因还在找,目前采用的是文件读写判断修改时间 然后去推送。也就是说你那个文件只要修改就会去推送到本地客户端,里面可以执行js html css 等你想要的效果。
期待大神优化~

评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
goldencolor
积分:3916 等级:LV4
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /