2

我刚开始在我的 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 界面事件源脚本发送新数据。

只有当我告诉它这样做时。我怎样才能做到这一点?

感谢您的帮助,致以亲切的问候,朱利安

4

1 回答 1

2

关于我没有太多东西要一次发送的事实一个从 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);
}

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

于 2012-09-19T11:43:20.350 回答