Xpoint
   [напомнить пароль]

Sleep + $| == HTML-страница не подгружается постепенно

Метки: [без меток]
2018-12-25 21:39:41 [обр] nestandart[досье]

всё стояло на сервере лет 10 назад. всё замечательно работало.
это чат, страница которого должна подгружаться по мере записи строк в её файл.
сейчас поставил всё на другой сервер -> страница не грузится по мере... а остаётся пустой, пока либо время не выйдут, либо что то ещё. а потом всё является одним скопом.

сначала думал на "sleep" -> поставил use Time::HiRes;
вроде стало как то легче... но может это так кажется.

что делать? куда копать?
гуглил, что есть что то для отключения буфера - но не совсем понятно, как это прописать.

#!/usr/bin/perl
use CGI;
use IO::Seekable;
$query = new CGI;
use CGI::Carp qw(fatalsToBrowser);
use File::stat;
use Time::HiRes;

$| =1; #
...........

open(BODY,"$body") or print "ошибка 25684557";
seek(BODY, -2000, 2) or print "ошибка 27345757";
$num=0;
$refresh = 1;
$speed = 1;

for ($i = 0; $i <= 600; $i++) {
   #sleep($speed) or print "ошибка 2594567";
   Time::HiRes::sleep(0.2); #.2 seconds
   $text=<BODY>;
   if ($num >= 150) {&check_user; $num=0;} else {$num++;}
   if ($text eq "") {
      $speed = 1;
      $refresh = 0;
   }
   else {
      &wiev_body;
   }
}
close(BODY);

спустя 4 часа [обр] Jared(3/26)[досье]

nestandart[досье], в этом вот вашем отвратительно все от начала до конца. Так только в 90-х совсем начинающие делали. Лучший выход тут - все выбросить и переделать правильно.

Ну а по теме - для начала подцепитесь тельнетом и удостоверьтесь что буфферизация не на клиенте:

telnet your.domain.com 80

> GET /chat_uri/ HTTP/1.1
> Host: your.domain.com 
>
>

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

Ну вот пара ссылок:
http://lmgtfy.com/?q=perl+cgi+autoflush
https://www.perlmonks.org/?node_id=622339

спустя 1 час 21 минуту [обр] nestandart[досье]

хмм... так и думал, что так будет :)

а нельзя ли это всё как то получше мне разжевать ? :)

спустя 19 часов [обр] Jared(3/26)[досье]
nestandart[досье], что именно?
Надо проверить, ваш код корректно отдает данные порциями - запустите скрипт из консоли и визуально удостоверьтесь в этом.
Если все нормально, внимательно читаем пост с perlmonks. Вкратце - речь там о том, что браузер не отрисовывает полученные данные сразу по факту получения.
спустя 21 день [обр] nestandart[досье]
что именно?

всё. Где взять телнет и что именно в нём ввести.

windows телнет не подключается (если я правильно понял, что там как вводить) : "o domen.de 80"
выводит черещз некоторое время "подключение к узлу утерянно".

запустите скрипт из консоли

у меня винда. какая консоль?

хорошо, могу поставить что то , что бы получить консоль. что поставить? что там как ввести?

этот код работал великолепно 15 лет назад.
я его просто сейчас на другой хост перенёс.

спустя 11 часов [обр] Jared(3/26)[досье]

nestandart[досье] в винде своя консоль. Называется cmd (Пуск->Выполнить->cmd в XP/7, в более современных не в курсе, давно не пользуюсь). Там и выполняем:

cmd>> telnet example.tld 80
GET /chat_uri/ HTTP/1.1
Host: exmple.tld
<перевод_строки>
<перевод_строки>

И посмотреть что выйдет. В каких-то редакциях семерки (если не во всех) тельнет в поставку не входил. Как его поставить - гугл в помощь, там на это надо было с десяток кликов, кажется.

Ну и опять же запустить ваш скрипт из той же консоли, возможно сначала слегка модифицировав, потому как запуск не через CGI происходит:

cmd>> perl.exe ./mysqript.pl

Вы перенесли с одной винды на другую?

Powered by POEM™ Engine Copyright © 2002-2005