Google Chrome и потоковые HTTP-соединения?

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

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

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

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

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

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

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

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

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

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

Вы говорили с разработчиками Chrome? Вы открыли ошибку об этом? IMHO лучшим решением является заставить Chrome вести себя как другие браузеры, а не обходные пути для него.

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

Поток работает. Решением от вечности является решение.

print "2048 точек [BR> \ n";

[= <

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

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