Google Chrome и потоковые HTTP-соединения? - PullRequest
3 голосов
/ 26 октября 2008

Google Chrome не работает так же, как другие браузеры, когда сталкивается с этим слепком:

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

    sleep(5);
}
?>

Похоже, что он ждет завершения соединения, прежде чем что-либо предпринимать.

Кроме опроса, как я могу сделать подобное в Google Chrome?

Ответы [ 6 ]

4 голосов
/ 24 сентября 2009

У меня была похожая проблема, и я решил ее, добавив тег HTML (в моем случае
) перед каждым сбросом.

Я думаю, что Chrome ждет, пока элемент , который отображается , закрывается, прежде чем запускать повторную визуализацию. Это всего лишь предположение.

Кажется, для этого не требуется 1024 байта - я думаю, что у меня было бы чуть меньше 512 байтов, когда он работал.

3 голосов
/ 26 октября 2008

Некоторые браузеры требуют загрузки определенного количества байтов перед отображением доступных данных. Я помню, как в прошлый раз, когда я пытался сделать то, что вы делаете, мне пришлось выбросить что-то вроде 300 пробелов, чтобы браузер с этим справился.

1 голос
/ 26 октября 2008

Хотелось бы, чтобы у меня был доступ к Chrome, чтобы проверить некоторые идеи. Вы пытались добавить HTML после </script> и посмотреть, будет ли он отображаться постепенно? Я полагаю, что так и будет, и если это так, это будет доказательством того, что Chrome не хочет запускать javascript в элементах <script> во время загрузки страницы. Конечно, рендеринг разметки может запустить ваши скрипты. Если нет, вы можете попробовать включить javascript в качестве внешних файлов и посмотреть, влияет ли это на время выполнения.

Я думаю, что браузеры обычно имеют некоторую свободу действий в соответствии со спецификацией, когда они начинают выполнять javascript, особенно при загрузке страницы. Это может быть невозможно сделать в кросс-браузерном режиме без опроса.

0 голосов
/ 28 апреля 2009
<?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 байтов данных. тогда все будет работать нормально. И не забудьте сохранить тег script в теге body. Странная вещь, в моем случае, если я добавлю 1024 байта, это сработало. Надеюсь, это поможет вам

Вышеупомянутая программа работает нормально в Google Chrome.

0 голосов
/ 25 ноября 2008

Поток работает. Ответ от отсутствия век - это решение.

печать "2048 точек [BR> \ n";

[= <</p>

Кстати, посмотрите на пользовательский агент. Safari тоже нужно много байтов. Я думаю, 1024. Firefox нужно не так много байтов.

0 голосов
/ 26 октября 2008

Вы общались с разработчиками Chrome? Вы открыли ошибку об этом? ИМХО, лучшее решение - заставить Chrome вести себя так же, как другие браузеры, вместо того, чтобы обойти его.

Хорошо, на самом деле вам, вероятно, понадобится краткосрочный обходной путь. Но представьте себе мир, в котором каждый браузер ведет себя по-разному в каждом аспекте, скажем, HTTP, HTML, CSS-обработка ... это не будет приятным местом!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...