Онлайн индикатор

Теги:
 
+
-
edit
 

Vestel
Vestel2

GM и модератор
Иногда, сервер начинает баговать и непускает туда новых игроков. Те кто в момент этих глюков находятся на сервере в топе отображаются, и можно сделать вывод, что сервер is up and running.

У меня родилось словесное решение данной проблеммы.
Надо подготовить cgi-скрипт, который по факту входа будет отсылать серверной части пакет, на login зарезервированного игрока test, а затем переходить в режим ожидания ответа. Если ответ получен - выводить иконку, что все хорошо. Если нет, то по timeout 1 минуту выводить сообщение: Простите, ошибка.
Туда же можно прикрутить проверку. Если репорты об ошибке прошли количеством больше 10 за 15 минут, то отдавать серверу комманду на перезагрузку.

В cgi - еще более не силен, чем в Яве, посему собрать данный проект не могу. Выставляю на ваш суд и жду комментариев.
Мой ник по-русски пишется как Вестель, в независимости от рода, пола, склонения, спряжения, погоды, настроения автора и прочих факторов.  
+
-
edit
 

WepWeHb

новичок
Vestel, 20.03.05 11:19:16:
Надо подготовить cgi-скрипт, который по факту входа будет отсылать
.....
snap: 6749
 

на i2j.sf.net, на их форуме уже есть готовое решение server status индикатор.
по-моему, я его в users contributions видел.
можно просто его установить.
Ничего нельзя сказать однозначно!  
+
-
edit
 

Balancer

администратор
★★★★★
У меня с онлайн-индикатором всё просто. В качестве онлайн-статуса пишется не единичка, а время последнего обновления статуса (при каждом автосейве). А проверка онлайна проверяет время. Показываются только игроки, статус которых обновлялся в последние 1000 секунд. Если сервер повис, то обновления статуса нет, и игроки выпадут из онлайна, даже если в их статусе прописан не ноль.
 
+
-
edit
 

Vestel
Vestel2

GM и модератор
Если сервер встретил жуткий лаг, и все движутся в слайдшоу 1 фрейм в 3 секунды, то автосейв работает, и твой статус выводит, что все в порядке.
Мой ник по-русски пишется как Вестель, в независимости от рода, пола, склонения, спряжения, погоды, настроения автора и прочих факторов.  

Scott

новичок
code text
  1. <?php
  2. $ip = gethostbyname("127.0.0.1");
  3. print "<html>\n";
  4. print "<table cellpadding=0 cellspacing=0>\n";
  5. print "<tr>\n";
  6. if($fp = @fsockopen($ip, 7777)) {
  7. print("<b><th>Lineage II Server: </b></th><td><b><font color=\"#139B36\">ONLINE</font></b></td>");
  8. fclose($fp);
  9. } else {
  10. print("<b><th>Lineage II Server: </b></th><td><b><font color=\"#DD0000\">OFFLINE</font></b></td>");
  11. }
  12. print "</tr>\n";
  13. print "</table>\n";
  14. print "<br><br>\n";
  15. print("</center>");
  16. ?>
 
+
-
edit
 

Juokelis

новичок
code text
  1. <html>
  2. <head>
  3. <title>L2C2 server Status</title>
  4. </head>
  5. <body>
  6. <?php
  7. $ip = gethostbyname("localhost");
  8. print "<html>\n";
  9. print "<table cellpadding=0 cellspacing=0>\n";
  10. if($fp = @fsockopen($ip, 7777)) {
  11.         print("<b><tr><th>Lineage II Server: </b></th></tr>
  12.         <tr><td><b><font color=\"#139B36\"> ONLINE</font></b></td></tr>\r");
  13.         fclose($fp);
  14. }
  15. else {
  16.         print("<b><tr><th>Lineage II Server: </b></th></tr>
  17.         <tr><td><b><font color=\"#DD0000\"> OFFLINE</font></b></td></tr>\r");
  18. }
  19. print "</table><br>\n";
  20. print "</center>";
  21. print "<b>Online users:</b><br>\r";
  22.  
  23. $link = mysql_connect ("localhost", "!!!USER!!!", "!!!PASSWORD!!!") or die ("Could not connect to server");
  24. mysql_select_db ("l2jdb") or die ("[red]Could not select database ![/red]<br>");
  25.  
  26. $sql = "SELECT * FROM characters";
  27. $result = mysql_query ( $sql ) or die ("Error:" . $query);
  28. $i = 0;
  29. while ( $row = mysql_fetch_array ( $result ) ) {
  30.         if ($row['online']!='') {
  31.   print "$row[account_name]: $row[char_name]<br>\r";
  32.   $i++;
  33.         }
  34. }
  35.         if ($i==0)
  36.   print "none<br>\r";
  37. ?>
  38. </body>
  39. </html>
 
+
-
edit
 

Balancer

администратор
★★★★★
Я уже не раз приводил код, которым у меня список онлайновых на http://la2.balancer.ru/top/ рисуется:
code text
  1. <?
  2.     function modules_top_onlinelist_main()
  3.     {
  4.         include_once('funcs/DataBase.php');
  5.         $hts = new DataBase('l2jdb','<login>>', '<passwd>');
  6.         $list = $hts->get_array("SELECT * FROM `characters` WHERE `online` > ".(time()-1000)." ORDER BY `level` DESC, `char_name`;");
  7.  
  8.         echo "<table cellSpacing=\"0\" class=\"btab\">\n";
  9.         echo "<tr><th>№</th><th>Имя пользователя</th><th>Уровень</th><th>Пол</th><th>Класс</th></tr>\n";
  10.  
  11.         $n = 1;
  12.         foreach($list as $i)
  13.         {
  14.             $cs = $hts->get("SELECT * FROM `class_list` WHERE `id` = ".$i['classid']);
  15.  
  16.             echo "<tr>";
  17.             echo "<td>$n</td>";
  18.             echo "<td><b>{$i['char_name']}</b></td>";
  19.             echo "<td>{$i['level']}</td>";
  20.             $sex = array(0=>'М', 1=>'Ж');
  21.             echo "<td>{$sex[$i['sex']]}</td>";
  22.             list($r, $class) = split("_", $cs['class_name']);
  23.             $race = array('H'=>'Human', 'E'=>'Elven', 'DE'=>'Dark Elven', 'O'=>'Orc', 'D'=>'Dwarven');
  24.             echo "<td>{$race[$r]} $class</td>";
  25.  
  26.             echo "</tr>\n";
  27.             $n++;
  28.         }
  29.  
  30.         echo "<tr><th colSpan=\"5\">Всего онлайн: ".sizeof($list)."</th></tr>\n";
  31.         echo "</table>\n";
  32.  
  33.     }
  34.  
  35.     modules_top_onlinelist_main();
  36. ?>
 
UA SuperKent #21.03.2005 16:33
+
-
edit
 

SuperKent

новичок
Balancer, 20.03.05 21:42:57:
Я уже не раз приводил код, которым у меня список онлайновых на http://la2.balancer.ru/top/ рисуется:
code text
  1. <?
  2.     function modules_top_onlinelist_main()
  3.     {
  4.         include_once('funcs/DataBase.php');
  5.         $hts = new DataBase('l2jdb','<login>>', '<passwd>');
  6.         $list = $hts->get_array("SELECT * FROM `characters` WHERE `online` > ".(time()-1000)." ORDER BY `level` DESC, `char_name`;");
  7.  
  8.         echo "<table cellSpacing=\"0\" class=\"btab\">\n";
  9.         echo "<tr><th>№</th><th>Имя пользователя</th><th>Уровень</th><th>Пол</th><th>Класс</th></tr>\n";
  10.  
  11.         $n = 1;
  12.         foreach($list as $i)
  13.         {
  14.             $cs = $hts->get("SELECT * FROM `class_list` WHERE `id` = ".$i['classid']);
  15.  
  16.             echo "<tr>";
  17.             echo "<td>$n</td>";
  18.             echo "<td><b>{$i['char_name']}</b></td>";
  19.             echo "<td>{$i['level']}</td>";
  20.             $sex = array(0=>'М', 1=>'Ж');
  21.             echo "<td>{$sex[$i['sex']]}</td>";
  22.             list($r, $class) = split("_", $cs['class_name']);
  23.             $race = array('H'=>'Human', 'E'=>'Elven', 'DE'=>'Dark Elven', 'O'=>'Orc', 'D'=>'Dwarven');
  24.             echo "<td>{$race[$r]} $class</td>";
  25.  
  26.             echo "</tr>\n";
  27.             $n++;
  28.         }
  29.  
  30.         echo "<tr><th colSpan=\"5\">Всего онлайн: ".sizeof($list)."</th></tr>\n";
  31.         echo "</table>\n";
  32.  
  33.     }
  34.  
  35.     modules_top_onlinelist_main();
  36. ?>

snap: 6840
 



У мя твой онлайн не работает. что за фаил у тя в папке funcs/DataBase.php. выложи плиз свой полный онлайн с топом.
Версия сервера ОФФ. Athlon 3,2Gz, Ram 4Gb, HDD SATA 2x80Gb 7200  
+
-
edit
 

Balancer

администратор
★★★★★
Вот это и есть "полный онлайн".

DataBase.php в данном случае это моя либа от CMS, но она сама по себе не интересна, т.к. её выхов легко заменяется чистыми mysql_* вызовами.
 
+
-
edit
 

Juokelis

новичок
Balancer, 21.03.05 16:46:36:
Вот это и есть "полный онлайн".

DataBase.php в данном случае это моя либа от CMS, но она сама по себе не интересна, т.к. её выхов легко заменяется чистыми mysql_* вызовами.
snap: 7051
 



А я как раз только и хочу показывать только столько инфы сколько показываю - ни лвл, ни професси, ни рассы даже нефиг всем знать ;)
 

Nurgl

втянувшийся
А как сделать чтоб отображался именно ОНЛАЙН сервера т.е. именно тот список кто в данный момент на сервере... Я видел баланеср задовал такой вопрос на л2ж форуме, но дельного ответа никто недал :)
http://nucer.ru - форум эксклюзивной сборки nucer'а с моими датапаками !  

Scott

новичок
для разных сборок сейчас ответ отличается...
посмотри characters базы данных работающего сервера и все станет понятно ;)
 

Nurgl

втянувшийся
Scott, 21.03.05 19:29:30:
для разных сборок сейчас ответ отличается...
посмотри characters базы данных работающего сервера и все станет понятно ;)
snap: 7088
 


Посмотрел и никак понять немогу что значит ID в калонке Online ?
http://nucer.ru - форум эксклюзивной сборки nucer'а с моими датапаками !  
+
-
edit
 

Juokelis

новичок
Nurgl, 21.03.05 19:36:48:
Посмотрел и никак понять немогу что значит ID в калонке Online ?
snap: 7089
 


online всегда пуст есле ты offline, в нем инфа будет только тогда есле чар online.
т.е. тебе дофени что там что означяет .. просто смотриш - NULL или полон и все ... те что полные - online, NULL - offline

 

Nurgl

втянувшийся
Juokelis, 21.03.05 20:36:19:
online всегда пуст есле ты offline, в нем инфа будет только тогда есле чар online.
т.е. тебе дофени что там что означяет .. просто смотриш - NULL или полон и все ... те что полные - online, NULL - offline
snap: 7109
 


Нефига там неправельно... У меня 40 челов онлайн а значения там у 83.. <_<
http://nucer.ru - форум эксклюзивной сборки nucer'а с моими датапаками !  
+
-
edit
 

Balancer

администратор
★★★★★
Nurgl, 21.03.05 19:17:16:
А как сделать чтоб отображался именно ОНЛАЙН сервера т.е. именно тот список кто в данный момент на сервере... Я видел баланеср задовал такой вопрос на л2ж форуме, но дельного ответа никто недал :)
snap: 7084
 


Уф. Начинаем читать этот топик с http://balancer.ru/forums/index.php?showto...findpost&p=6762 :)

Вопрос этот я задавал ещё до того, как первое изменение в код l2j внёс :)
 
+
-
edit
 

Juokelis

новичок
Т.е. главная вот эта строчька :)
"SELECT * FROM `characters` WHERE `online` > ".(time()-1000).";"
 
+
-
edit
 

Balancer

администратор
★★★★★
Угу, именно она. В онлайне те, у кого были автосейвы за последние 1000 секунд (реально по умолчанию они идут, ЕМНИП, каждые 600 секунд = 10минут)
 
RU 0xygenius #12.10.2005 00:05
+
-
edit
 

0xygenius

новичок
Ребята помогите я вообще не могу настроить статус! Вообщем на EasyPHP в локалбном веб сервере все работает как только Status.php кидаю в нет на сайт то сразу глюк с подключением к l2jdb! Почему так скажите решение я уже 4 дня пишу это на разных форумах так всем пофиг! Хоть вы РУсс Бразер помогите!
 
AD Реклама Google — средство выживания форумов :)
+
-
edit
 

Silence

новичок
0xygenius:
Ребята помогите я вообще не могу настроить статус! Вообщем на EasyPHP в локалбном веб сервере все работает как только Status.php кидаю в нет на сайт то сразу глюк с подключением к l2jdb! Почему так скажите решение я уже 4 дня пишу это на разных форумах так всем пофиг! Хоть вы РУсс Бразер помогите!
 



посмотри права доступа root-a или user-a которого используешь для входа в ДБ если имеет со всех IP разрешения а не только "localhost" ,если я правильно понял,то ты хочешь иметь доступ к базе из вне.
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru