谷歌浏览器和流媒体HTTP连接


Google Chrome and Streaming HTTP connections?

Google chrome在遇到此块时的行为与其他浏览器不同:

<?php
while (true) {
    echo "<script type='text/javascript'>'n";
    echo "alert('hello');'n";
    echo "</script>";
    flush();
    sleep(5);
}
?>

似乎在执行任何操作之前正在等待连接终止。

除了轮询之外,我如何在谷歌浏览器中做类似的事情?

我有一个类似的问题,并通过在每次刷新之前添加一个 HTML 标签(在我的例子中为
)来解决它。

我的猜测是,Chrome 在触发重新渲染之前等待正在显示的元素关闭。 不过这只是一个猜测。

它似乎不需要 1024 字节 - 我想当它工作时我会有不到 512 字节。

某些浏览器要求在呈现可用数据之前下载一定数量的字节。我记得上次我尝试做你正在做的事情时,我最终不得不转储大约 300 个空格以确保浏览器会打扰它。

我希望

我现在可以访问Chrome来测试一些想法。您是否尝试过在</script>后添加一些 HTML 并查看它是否以增量方式呈现? 我想它会,如果是这样,那将证明Chrome不想在页面加载时<script>元素中运行javascript。 当然,呈现标记可能会触发脚本运行。 如果没有,您可以尝试将javascript作为外部文件包含在内,看看这是否会影响执行时间。

我认为浏览器在开始执行javascript时通常会根据规范有一些回旋余地,尤其是在页面加载时。 如果不进行轮询,则可能无法以完全跨浏览器的方式执行此操作。

您是否与 Chrome 开发人员进行了交谈?您是否打开了有关此的错误?恕我直言,最好的解决方案是让 Chrome 像其他浏览器一样运行,而不是有解决方法。

好的,实际上您可能需要一个短期的解决方法。但是想象一下这样一个世界,在这个世界中,每个浏览器在每个方面的行为都不同,比如HTTP,HTML,CSS处理......这不会是一个愉快的地方!

流正在工作。无眼的答案就是解决方案。

打印"2048 点[BR>'";

的 [ = <</p>

顺便说一句,看看用户代理。Safari也需要很多字节。我认为是1024。Firefox 不需要那么多字节。

<?php
$i = 0;
while (true) {
    if($i == 0) {
        echo "<html><body>";
    }
    echo "<script type='text/javascript'>'n";
        echo "alert('hello');'n";
    echo "</script>";
    if($i == 0 ) {
        $padstr = str_pad("",2048,"&nbsp;");
        echo $padstr;
        echo "</body></html>";
    }
    flush();
    sleep(5);
    $i = $i + 1;
}
?>

对于第一个时间,发送至少 2048 字节的数据。 然后它会正常工作。并确保将脚本标签保留在正文标签中。奇怪的是,就我而言,如果我添加 1024 字节,它就可以工作。希望这对你有帮助

上面的程序在谷歌浏览器中运行良好。