Чат с непрерывной загрузкой

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
helvar
Сообщения: 10
Зарегистрирован: 02 апр 2004, 21:15

Открывая эту тему, хотел узнать мнения людей по поводу технологии создания чатов с непрерывной загрузкой данных. Существует много Java-скриптов, которые подавляют "прыгучесть" данных фрейма во время обновления. Данная же технология позволяет получать данные с сервера непрерывно. Налицо - новые сообщения появляются почти сразу после их отправки, однако это значительно увеличивает нагрузку на Web-сервер. В качестве примера ниже привожу пример PHP-скрипта, часто встречающегося в сети, который использует эту технологию. Язык может быть и другим, но принцип понятен.

<?
$FileName="messages.txt";
// Имя файла, в котором хранятся записи.

set_time_limit(0);
// Говорим php интерпретатору, что
// ограничивать во времени нас не нужно.

for ($i=0;$i<100;$i++)
echo "";
flush();
// Выводим несколько байт, чтобы нас
// правильно понял веб браузер посетителя.

$array=file($FileName);
// Загоняем базу сообщений в массив $array

$ArrayCount=count($array);
// Подсчитываем количество ключей в массиве $array, и записываем
// значение в $ArrayCount

$NewArrayCount=0;
// Определяем переменную $NewArrayCount, чтобы небыло ошибок.

while(!0)
// Запускаем бесконечный цикл.
{
if($ArrayCount!=$NewArrayCount)
for($i=$NewArrayCount;$i<$ArrayCount;$i++)
echo $array[$i]."
";
// Выводим новые строки из базы сообщений.

$NewArrayCount=$ArrayCount;
$array=file($FileName);
$ArrayCount=count($array);
flush();
// Выводим содиржимое буфера, а потом очищаем его.
}
?>
UUU
Сообщения: 310
Зарегистрирован: 17 фев 2004, 09:27
Откуда: Иваново
Контактная информация:

Это будет работать только если хостинг твой ручной, т.к. надо гнать адммина хостинга поганой метлой. если он разрешает делать бесконечные циклы.
Реклама запрещена. См. Профиль :-)
helvar
Сообщения: 10
Зарегистрирован: 02 апр 2004, 21:15

Хостинг ручной, только все равно ничего не получается. Web-сервер дает команду kill для cgi-скрипта после некоторого time-out, а браузер делает вид, что ничего и не получал. Складывается ощущение, что сервер ждет только одной команды: return 0 и только после этого передает данные клиенту. Вот такая ситуация.
Ответить