服务器发送事件:不起作用

时间:2014-08-06 08:40:33

标签: javascript php mysql notifications server-sent-events

我正在使用HTML5 Server-Sent Events

实际上我需要在数据库(php / mysql)中插入任何新记录时显示通知(新记录输入和未读取)。

因此,出于测试目的,我只尝试了总行数。但是我在本地主机中收到此错误消息:

  

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

该行是:

var source = new EventSource("demo_sse.php");

我试过这个:

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个记录,这可能会减慢我的资源。

3 个答案:

答案 0 :(得分:4)

根据this

有几个“规则”需要满足,而你的缺点是:

  • 输出要发送的数据(始终以“data:”开头)

它有点像:

echo "data: {$resa['ct']}\n\n"; 

答案 1 :(得分:2)

将标题设置为{ "Id":1, "ApimId":"1", "FirstName":"Super", "LastName":"Admin"," "Email":"ahmed@gmail.com" } 对我有用:

text/event-stream

答案 2 :(得分: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
}

?>

我自己测试了这段代码片段;它为我工作。如果您有任何疑问,请与我们联系。