Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Онлайн почти мгновенный
 
 автор: Kreg-Heg   (17.05.2007 в 10:34)   письмо автору
 
 

Всем привет!
При входе в чат пользователя в базу заносится id - номер; login - логин; password - пароль;
email - почта; status - статус; nexttime - время входа; thistime - время последнего обращения к серверу; active - 1/0 активность; chasov - кол-во часов проведенных в чате; hitov - кол-во написанных сообщений.

Когда фреймы загружены, то во фрейме users.php происходит постоянное обращение к файлу gousers.php (раз в секунду c помощью аякса) его код ниже. В этом файле данному пользователю выставляется текущее время и в цикле проходит всех остальных пользователей чата и у них также проверяет активность (разность текущего времени и времени последнего обращения к файлу). Если активность подтверждаетсято он выводится, если нет то в полю active присваивается 0 (это поле создано для того чтобы потом еще делать проверку на то, был ли данный ник активен при прошлом обращении к файлу, чтобы во фрейм сообщений выводить надпись о выходе его из чата)


<?php
/*забираем в переменные логин и пороль данного пользователя*/
session_start();
$thislogin $_SESSION['login'];
$thispassword $_SESSION['password'];

/* подключаемся к базе */
header("Content-type: text/html; charset=Windows-1251");
include(
"includer.php");
$db mysql_connect($myserver$mylogin$mypassword);
$ll mysql_select_db('users',$db);

$cifra 1;
$necifra 0;

/* данному пользователю выставляем текущее время*/
    
$sql="SELECT * FROM `chat_users` WHERE `login`='".$thislogin."' and `password`='".$thispassword."'";
    
$result=mysql_query($sql);
    
$row=mysql_fetch_array($result);
    
$time time();
    
$id$row["id"];
    
$login $row["login"];
    
$password $row["password"];
    
$email $row["email"];
    
$status $row["status"];
    
$ip $row["ip"];
    
$nexttime $row["nexttime"];
    
$chasov $row["chasov"];
    
$hitov $row["hitov"];
    
$sql="DELETE FROM `chat_users` WHERE `id`=".$id;
    
$result=mysql_query($sql);
    
$sql="INSERT INTO `chat_users` VALUES ('".$id."','".$login."', '".$password."', '".$email."', '".$status."', '".$ip."', '".$cifra."','".$nexttime."','".$time."','".$chasov."','".$hitov."')";
    
$result=mysql_query($sql);

/*забираем в маасив mas все логины из базы */
$mas = array()
$i 1;
$query "SELECT * FROM 'chat_users' ORDER BY login"
$ath mysql_query($query); 
if(!
$ath) exit("<p>Ошибка в запросе к таблице сессий</p>"); 
if(
mysql_num_rows($ath)>0)
 { 
 while(
$author mysql_fetch_array($ath)) 
   { 
    
$mas[$i] = $author['login']; 
    
$i $i+1;
    } 
}

/*проверяем каждый ник в базе на проявление активности*/
for ($j 1$j $i$j++)
{
$login $mas[$j];
 
$sql="SELECT * FROM `chat_users` WHERE `login`='".$login."'";
    
$result=mysql_query($sql);
    
$row=mysql_fetch_array($result);
    
$id$row["id"];
    
$login $row["login"];
    
$password $row["password"];
    
$email $row["email"];
    
$status $row["status"];
    
$ip $row["ip"];
    
$nexttime $row["nexttime"];
    
$thistime $row["thistime"];
    
$chasov $row["chasov"];
    
$hitov $row["hitov"];
    
$otvet $time $thistime;
/*если пользователь активен, то выводим его*/
    
if ($otvet 3)
    {
     echo 
$login;
     echo 
"<br>";
    }
/*если пользователь неактивен, то ставим ему в активность 0*/
    
else
    {
    
$sql="DELETE FROM `chat_users` WHERE `login`=".$login;
    
$result=mysql_query($sql);
    
$sql="INSERT INTO `chat_users` VALUES ('".$id."','".$login."', '".$password."', '".$email."', '".$status."', '".$ip."', '".$necifra."','".$nexttime."','".$thistime."','".$chasov."','".$hitov."')";
    
$result=mysql_query($sql);
    }
}
?>


В этом коде гдето ошибка, не могу найти где.

   
 
 автор: cheops   (17.05.2007 в 10:55)   письмо автору
 
   для: Kreg-Heg   (17.05.2007 в 10:34)
 

В чём проявляется ошибка? Выводятся ли какие-либо сообщения?

   
 
 автор: Kreg-Heg   (17.05.2007 в 11:05)   письмо автору
 
   для: cheops   (17.05.2007 в 10:55)
 

нет, фрейм остается пустым

   
 
 автор: Trianon   (17.05.2007 в 11:21)   письмо автору
 
   для: Kreg-Heg   (17.05.2007 в 10:34)
 

скрипт гробит процессорное время (апача и mysql-сервера), гробит трафик (сервера и пользователей). Причем так, что пользователи разбегаются, а хостер (если это, конечно, не личный сервер) присылает предупреждение о превышении квот.

а вот эта мантра (Когда фреймы загружены, то во фрейме users.php происходит постоянное обращение к файлу gousers.php (раз в секунду c помощью аякса) его код ниже. В этом файле данному пользователю выставляется текущее время и в цикле проходит всех остальных пользователей чата и у них также проверяет активность (разность текущего времени и времени последнего обращения к файлу). Если активность подтверждаетсято он выводится, если нет то в полю active присваивается 0 (это поле создано для того чтобы потом еще делать проверку на то, был ли данный ник активен при прошлом обращении к файлу, чтобы во фрейм сообщений выводить надпись о выходе его из чата))
выедает моск. Начисто.

   
 
 автор: Kreg-Heg   (17.05.2007 в 11:31)   письмо автору
 
   для: Trianon   (17.05.2007 в 11:21)
 

У меня выделенный, поэтому все норм будет =)
Процессор Pentium-4 2.4 ГГц
Оперативная память 1024 Мб
Жёсткий диск IDE HDD RAID1 2x80 Гб
Лимит трафика 1000 Гб

И фрейм с сообщениями работает примерно по такомуже принципу и с трафиком тоже нормально всё.

   
 
 автор: Kreg-Heg   (17.05.2007 в 11:32)   письмо автору
 
   для: Kreg-Heg   (17.05.2007 в 11:31)
 

Просто я хочу сделать действительно хороший быстрый чат. Ставка делается на скорость!

   
 
 автор: Trianon   (17.05.2007 в 11:36)   письмо автору
 
   для: Kreg-Heg   (17.05.2007 в 11:32)
 

Вот если делаете ставку на скорость - так и скрипт пишите так, чтобы он не выполнял одно и то же по двадцать раз, когда можно обойтись одним.
И еще.... в SQL есть такая команда "UPDATE" . В подавляющем большинстве случаев работает она быстрее, чем INSERT/DELETE . И транзакционных проблем не создает.

А вообще, это насчет скоростных чатов - в котором в реальном времени видно. как пятнадцать человек печатают буковки фраз.

   
 
 автор: Kreg-Heg   (17.05.2007 в 12:10)   письмо автору
 
   для: Trianon   (17.05.2007 в 11:36)
 

Вы можете сказать видите ли вы ошибки в коде.

   
 
 автор: Kreg-Heg   (17.05.2007 в 12:25)   письмо автору
 
   для: Kreg-Heg   (17.05.2007 в 12:10)
 

Всё, разобрался, работает =)

   
 
 автор: Temnovit   (17.05.2007 в 13:10)   письмо автору
 
   для: Kreg-Heg   (17.05.2007 в 11:32)
 

>Просто я хочу сделать действительно хороший быстрый чат. Ставка делается на скорость!

Действительно хороший быстрый чат, надо делать с использованием Ajax. С рефрешом такой не получится.

   
 
 автор: Rembrant   (17.05.2007 в 20:00)   письмо автору
 
   для: Temnovit   (17.05.2007 в 13:10)
 

прочитайте первый пост внимательнее, у него всё на аяксе

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования