服务器发送事件:无法正常工作

4
我正在使用HTML5服务器发送事件。 实际上,我需要显示通知(新记录输入和未读记录)当数据库中插入任何新记录(php / mysql)时。 因此,为了测试目的,我只尝试了总行数。但是在我的本地主机上,我遇到了以下错误消息:

Firefox无法与http://localhost/project/folder/servevent/demo_sse.php建立连接。

这一行是:
var source = new EventSource("demo_sse.php");

I have tried this:

index.php

<script>
if(typeof(EventSource) !== "undefined") {
    var source = new EventSource("demo_sse.php");
    source.onmessage = function(event) {
        document.getElementById("result").innerHTML = event.data;
    };
} else {
    document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}
</script> 
<div id="result"></div> 

demo_sse.php

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$db = mysql_connect("localhost", "root", ""); // your host, user, password
  if(!$db) { echo mysql_error(); }
$select_db = mysql_select_db("testdatase"); // database name
  if(!$select_db) { echo mysql_error(); }

$time = " SELECT count( id ) AS ct FROM `product` ";
$result = mysql_query($time);
$resa = mysql_fetch_assoc($result);
echo $resa['ct'];
flush();
?> 

请告诉我出了什么问题。

我知道我们可以使用Ajax来进行通知,并设定一定的时间间隔,但是我不想这样做。因为我有N条记录,这可能会影响我的资源。


我检查了我的查询,它工作得很好。它给了我5的计数结果,因为在我的表中有5条记录。但是不知道为什么它在服务器端事件中没有显示出来。 - user3209031
你知道问题出在哪里吗? - Nejthe
实际上,我忘记在这个模块上进行测试了... - user3209031
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
7
根据这里的内容,有几个需要遵守的“规则”,但您目前缺少以下内容:
  • 输出要发送的数据(始终以"data: "开头)
类似于以下格式:
echo "data: {$resa['ct']}\n\n"; 

2
设置头部为text/event-stream对我有用:
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

// Rest of PHP code

0
请根据您的需求修改以下代码片段。
<?php

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

// infinite loop
while (1) {
    // output the current timestamp; REPLACE WITH YOUR FUNCTIONALITY
    $time = date('r');
    echo "data: Server time: {$time}\n\n"; // 2 new line characters

    ob_end_flush();
    flush();
    sleep(2); // wait for 2 seconds
}

?>

我已经亲自测试了这段代码片段,对我来说是有效的。如果您有任何疑问,请告诉我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,