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 =