PHP服务器发送事件减少流量
我刚开始在PHP页面中使用SSE。我可以使用以下代码轻松发送新数据: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;
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中没有其他方法可以做到这一点。