我刚开始在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脚本发送到客户端?
我创建了一个小应用程序,它使用一个小API将状态更新发送到服务器。我希望其中一个API脚本告诉Web界面事件源脚本发送新数据。
只有当我告诉它这样做时。 我怎样才能做到这一点?
感谢您的帮助,亲切的问候,Julian
答案 0 :(得分:2)
关于我没有立即发送 MUCH 的东西(从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分钟或更长时间。