因为我做的应用需要像股票系统一样,实时刷新显示设备的基本状态参数信息。并且是内部系统,浏览器是由我们提供,所以我想采用HTML5的SSE(server-sent events)服务器发送事件来替代原始的AJAX,以降低服务器的压力以及更高的显示效果。我的前端页面://建立SSE对象
var source=new EventSource("test.php");
var gdata = null;
var a = null;
source.onmessage = function(event)
{
a = event;
gdata = event.data;
gdata = JSON.parse(gdata);
}
后台页面:header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$arr = array();
// 这里生成$arr数组,具体过程略去
$str = json_encode($arr);
echo "data:{\042Rows\042:$str}";
flush();
sleep(0.1);
在Firefox里,我的SSE显示正常,可以访问到gdata变量
但是Chrome里却不行。但是根据HTML5test的结果来看,Chrome应该是支持SSE的
所以特地来问问,是不是我设置的问题?希望知道的朋友帮我解决下
var source=new EventSource("test.php");
var gdata = null;
var a = null;
source.onmessage = function(event)
{
a = event;
gdata = event.data;
gdata = JSON.parse(gdata);
}
后台页面:header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$arr = array();
// 这里生成$arr数组,具体过程略去
$str = json_encode($arr);
echo "data:{\042Rows\042:$str}";
flush();
sleep(0.1);
在Firefox里,我的SSE显示正常,可以访问到gdata变量
但是Chrome里却不行。但是根据HTML5test的结果来看,Chrome应该是支持SSE的
所以特地来问问,是不是我设置的问题?希望知道的朋友帮我解决下
{
gdata = event.data;
gdata = JSON.parse(gdata);
})
后台发送的时候,还需要添加一个event记录,代码如下header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$arr = array();
// 这里生成$arr数组,具体过程略去
$str = json_encode($arr);
echo "event:newdata\n";
echo "data:{\042Rows\042:$str}"."\n\n";
flush();
这样在Chrome和Firefox里都可以正常使用SSE。
同时请注意,在输出的数据后,记得使用\n输出换行,否则数据可能会出现问题