html5中的SSE服务器推送,为什么客户端一直请求服务器呢,说好的服务器推送 如何实现推送是客户端有发送数据到服务器时,然后推送给客户端。firebug网络中一直有get请求,会不会浪费资源呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <!doctype html><html> <head> <meta charset="UTF-8"> <title>basic SSE test</title> <script type="text/javascript" src="jquery.1.4.2-min.js"></script> </head> <body> <pre id = "x">initializting...<?php echo 'now time is '.date('r');?></pre> <!--之所以使用pre标签而不是p或者div是为了确保数据能以它被接受时的格式呈现,而不会修改或格式化--> <textarea class="log" style="width: 100%; height: 500px;"> </textarea> <input type="text" id="text"> <input type="button" value="发送" onClick="send()"> <input type="button" value="清屏" onClick="Clear()"> </body> <script> var es = new EventSource("basic_sse.php"); es.addEventListener("message",function(e){ if(e.data != ''){ document.getElementById("x").innerHTML += "\n"+e.data; } },false);//使用false表示在冒泡阶段处理事件,而不是捕获阶段。 function send(){ var text=$('#text').val(); if(text!=''){ $('.log').append(text+"\r\n"); $.ajax({ type:'POST', async:false, url:'basic_sse.php', data:'mess='+text, success:function(msg){ }, error:function(){ alert('发送失败服务器响应超时'); } }) } } function Clear(){ $('.log').html(''); $('#text').attr('value',''); } </script></html> <?php header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); $time = date('r'); $con=mysqli_connect('localhost','root','root','test') or die(mysql_error()); mysqli_query($con,"SET names UTF8") or die(mysql_error()); if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest"){ $mess=$_POST['mess']; $time=date('Y-m-d H:i:s'); $sql='insert into messages (content,time) values ("'.$mess.'","'.$time.'")'; if(mysqli_query($con,$sql)){ $_SESSION['data'] = $mess; exit; } } echo "data: ".$_SESSION['data']."\n\n"; flush();?> 如果是 服务器推送,那么一定是用的 WebSocket 协议通讯但在你的代码中并未看到 ws:// 字样(因为网站默认是 http 协议通讯,所以 WebSocket 协议类型声明不可缺省) 救命啊~PHP程序以后台方式运行连接远程数据库老是会死机的问题。 ajax检验验证码输入是否正确 怎么购买网络空间啊? 请问php的一句代码,双引号中又加‘|’ 有人研究过qq或者msn的聊天接口没? 问大家一个为难很久的问题,高手帮忙! 100分求一段代码.急...... JavaScript 中如何弹出一个对话框可以选取"确定"与“取消”的? 用php做web应用程序需要注意什么问题? 数据库连接问题 google翻译代码调用 PHP长连接问题。第一次做遇到困难。希望各位大牛帮帮忙分析下。给个思路。
<html>
<head>
<meta charset="UTF-8">
<title>basic SSE test</title>
<script type="text/javascript" src="jquery.1.4.2-min.js"></script>
</head>
<body>
<pre id = "x">initializting...<?php echo 'now time is '.date('r');?></pre>
<!--之所以使用pre标签而不是p或者div是为了确保数据能以它被接受时的格式呈现,而不会修改或格式化-->
<textarea class="log" style="width: 100%; height: 500px;">
</textarea>
<input type="text" id="text">
<input type="button" value="发送" onClick="send()">
<input type="button" value="清屏" onClick="Clear()">
</body>
<script>
var es = new EventSource("basic_sse.php");
es.addEventListener("message",function(e){
if(e.data != ''){
document.getElementById("x").innerHTML += "\n"+e.data;
}
},false);//使用false表示在冒泡阶段处理事件,而不是捕获阶段。
function send(){
var text=$('#text').val();
if(text!=''){
$('.log').append(text+"\r\n");
$.ajax({
type:'POST',
async:false,
url:'basic_sse.php',
data:'mess='+text,
success:function(msg){
},
error:function(){
alert('发送失败服务器响应超时');
}
})
}
}
function Clear(){
$('.log').html('');
$('#text').attr('value','');
}
</script>
</html>
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$time = date('r');
$con=mysqli_connect('localhost','root','root','test') or die(mysql_error());
mysqli_query($con,"SET names UTF8") or die(mysql_error());
if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest"){
$mess=$_POST['mess'];
$time=date('Y-m-d H:i:s');
$sql='insert into messages (content,time) values ("'.$mess.'","'.$time.'")';
if(mysqli_query($con,$sql)){
$_SESSION['data'] = $mess;
exit;
}
}
echo "data: ".$_SESSION['data']."\n\n";
flush();
?>
但在你的代码中并未看到 ws:// 字样(因为网站默认是 http 协议通讯,所以 WebSocket 协议类型声明不可缺省)