PHP服务器发送事件减少流量

PHP服务器发送事件减少流量,php,ajax,push,server-sent-events,Php,Ajax,Push,Server Sent Events,我刚开始在PHP页面中使用SSE。我可以使用以下代码轻松发送新数据: while(true) { if (isset($_GET["selectedName"]) && $_GET["selectedName"] != "empty") { echo "data:current timestamp for user ".$_GET["selectedName"]." is ".time().PHP_EOL; echo PHP_EOL;

我刚开始在PHP页面中使用SSE。我可以使用以下代码轻松发送新数据:

while(true) {
    if (isset($_GET["selectedName"]) && $_GET["selectedName"] != "empty") {
        echo "data:current timestamp for user ".$_GET["selectedName"]." is ".time().PHP_EOL;
        echo PHP_EOL;
        ob_flush();
        flush();
    }
    sleep(1);
}
但这意味着,我每秒都要向客户机发送数据,我必须运行一个循环。示例中的字符串不是很多数据。但后来我想连接到一个数据库并从那里提取数据

如果我把整篇文章(或消息或其他任何东西)都拉出来,我会产生大量的数据

现在我的问题是:如何告诉脚本提供新数据并从另一个PHP脚本发送到客户端

我创建了一个小iOS应用程序,它使用一个小API向服务器发送状态更新。我想要一个API脚本来告诉web接口事件源脚本发送新数据

只有当我让它这么做的时候。 我怎样才能做到这一点


感谢您的帮助,带着亲切的问候,Julian

关于我没有多少东西可以立即发送的事实(州号从0到4和一个小消息字符串),我决定设置一个变量并检查是否有任何更改:

static $oldStateString;

while(true) {
    $result = mysql_query("SELECT * FROM st_workers");
    $currentStateString = "";

    while ($user = mysql_fetch_array($result)) {
        $currentStateString .= $user["stateIndex"].":--;".$user["state"].":--;".$user["humanReadableName"].":__;";
    }

    if ($currentStateString != $oldStateString) {
        echo "data:".$currentStateString.PHP_EOL;
        echo PHP_EOL;
        ob_flush();
        flush();

        $oldStateString = $currentStateString;
    }
    sleep(1);
}

但是:我注意到您必须稍后开始使用事件处理程序,而不是
。除了Safari 6和当前的FireFox之外,这在大多数浏览器中都会产生错误。浏览器无法识别它不再加载。因此,“加载微调器”直到5分钟或更长时间才会停止。

您找到解决方案了吗?我正在尝试做类似的事情。是的。阅读我的答案,享受并告诉我你将如何结束:)所以要清楚,这个脚本将每秒选择整个SQL表。。。对于每个eventsource连接?是。这是非常糟糕的,但实际上在普通的、好的、旧的PHP中没有其他方法可以做到这一点。