(fwd) RE: [apache-talk] пpавильное написание чатов

Andrey Gerzhov (kittle@freeland.kiev.ua)
Mon, 18 Oct 1999 13:38:13 +0300 (EEST)

-- forwarded message --
Path: freeland.kiev.ua!news.alexradio.kiev.ua!not-for-mail
Message-ID: <XFMail.991018123758.sk.list@comset.net>
Date: Mon, 18 Oct 1999 12:37:58 +0400 (MSD)
From: sk.list@comset.net
To: apache-talk@lists.lexa.ru
Subject: RE: [apache-talk]=?KOI8-R?Q?_=D0p=C1=D7=C9=CC=D8=CE=CF=C5?= =?KOI8-R?Q?_=CE=C1=D0=C9=D3=C1=CE=C9=C5?= =?KOI8-R?Q?_=DE=C1=D4=CF=D7?=
Newsgroups: alex.gated.apache.talk
Lines: 100
Xref: freeland.kiev.ua alex.gated.apache.talk:1704

Hi!

On 15-Oct-99 Alex Tutubalin wrote:

> Вот тут мной пишется очеpедная поделка - www-chat (пожалуй, из массовых вещей
> я только баннеpный обмен еще не писал :)

У меня чат уже давно радотает на php3 написанный.
И самое геморройное - это проверка полей. То есть любая фича обходится в
неприятно большое кол-во проверок.
Второе - это авторизация. Я пользую пхпшную, а пароли из хэша беру.
Очень неприятный момент - это список живых усеров. Тормозит... Вот я подумываю
как бы это быстро получать... Пока я перечитываю хэш и проверяю время :-(

> Возникает вопpос - как пpавильно обновлять содеpжимое окон клиентских
> бpоузеpов?

meta refresh. Только. :-(

> Есть подозpение, что meta refresh может дать кpайне непpиятные волны нагpузки
> за счет авто-синхpонизации всего хозяйства (если случайно получится так, что
> pавномеpная нагpузка вдpуг пеpестанет быть таковой, то она сама может начать
> собиpаться в волны). Что делать ? meta refresh with random delay ?

Угу. Я усеров спрашиваю время рефреша - они сами выбирают кому как удобнее.

> p.s. Планиpуемая нагpузка - большая, железо слабое, канал быстpый :)

Паямть... надо много.

Я начинаю замечать чат когда пишущих усеров становится больше 25-30. Правда у
меня сервер провайдера и на этом же компе сидат усервские сервера/страницы...

Да, написал тут быстрый tail() на php - родного там нет ;-) Им и пользуюсь:

<?
// То же что и tail
// возвращает массив строк без \n
// можно оерделить глобальные переменные tail_start_buf и tail_record_lenght
// под свои нужды... ;-)

function tail($file,$num) {
global $tail_start_buf;
global $tail_record_lenght;
if ($tail_start_buf==0) $tail_start_buf=80;
if ($tail_record_lenght==0) $tail_record_lenght=4096;
$appxlen=$tail_start_buf;// Примерная длина строки
$flen=filesize($file); // Длина файла
$out=array(); // То что вернется
$fp=@fopen($file,'r');
if ($fp) {
// Откуда читать?
do {
if ($num*$appxlen>$flen) $pos=0;
else $pos=$flen-($num*$appxlen);
$out=_readfile($fp,$pos,$num);
$appxlen*=2;
} while (count($out)!=$num && $pos!=0);
// Все.
fclose($fp);
}
return $out;
}
// Локальная функция...
function _readfile($fp,$pos,$num) {
global $tail_record_lenght;
fseek($fp,$pos);
$tmp=array();
for ($i=0; !feof($fp); $i++) {
$line=chop(fgets($fp,$tail_record_lenght));
if (!$line) break;
$tmp[$i]=$line;
}
$j=count($tmp)-$num;
if ($pos!=0 && $j==0) {
$j++;
}
if ($j<0) {
$j=0;
$xnum=$num-1;
} else $xnum=$num;
for ($i=0; $i<$xnum && $j<count($tmp); $i++,$j++) $out[$i]=$tmp[$j];
return $out;
}
?>

Есть предложения по улучшению?

SKiller
--------------------------
Sergei Keler
WebMaster of "ComSet"
E-Mail: skiller@comset.net
http://www.comset.net
--------------------------
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =

-- end of forwarded message --

-- 
С тем, что не помешает никогда,
                                               Kittle