因为我做的应用需要像股票系统一样,实时刷新显示设备的基本状态参数信息。并且是内部系统,浏览器是由我们提供,所以我想采用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的
所以特地来问问,是不是我设置的问题?希望知道的朋友帮我解决下

解决方案 »

  1.   

    问题解决Chrome里直接用onmessage则无法正常使用SSE,但是使用addEventListener便可以。代码如下source.addEventListener("newdata",function(event)
    {
        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输出换行,否则数据可能会出现问题