Здравствуйте, гость ( Вход | Регистрация )

4 страниц V  1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Онлайн Статус Собственными Ручищами
Полезность материала
Понравилась статья?
Да [ 31 ] ** [73,81%]
Нет [ 1 ] ** [2,38%]
Многобукф [ 10 ] ** [23,81%]
Всего голосов: 42
Гости не могут голосовать 
Ozzy Osbourne
сообщение 23.10.2010, 21:09
Сообщение #1


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



В связи с тем что вопрос создания статуса для сервера на сегодняшний день актуальный и в личку мне пришло пару сообщений по этому поводу - я расскажу вам как его создать своими ручищами при помощи mysql+php и чашки чая

В данном уроке мы будем рассматривать ситуацию когда сфера (у меня 56b), mysql и apache находятся на одной машине (сервере). Такой подход сильнее грузит сферу, но более понятен на старте новичкам.

В качестве сервера может выступать: ваш домашний компьютер, выделенный сервер (ddc) либо виртуальный сервер (vds/vps).
  1. Для начала установим apache+mysql на машину. Для этого мы будем использовать многофункциональный набор xampp (apache+mysql+php+perl). При его установке на нашу машину сразу станет нужный нам апач и mysql. Почитать подробнее можно на вики (http://ru.wikipedia.org/wiki/XAMPP)

    Заходим на официальный сайт в раздел Windows (http://www.apachefriends.org/en/xampp-windows.html) и качаем XAMPP Windows [EXE]

    После того как скачали - открываем и устанавливаем, к примеру на C:\xampp

    На рабочем столе находим ярлычек ”XAMPP Control Panel” и запускаем. Он нам открываем xampp панельку. Тыкаем на кнопку ”start” возле ”apache” и ”mysql”. Спустя пару секунд службы стартанут, а рядом станут активны кнопки ”admin”.

    (IMG:http://automum.od.ua/uosoft/1.jpg)

    Открываем браузер, вводим http://localhost/ в поле адреса, если на экране видим приветствие от xampp - значит пока что вы все сделали правильно.

  2. Теперь когда mysql и apache мы установили, следует научить сферу работать с базой. Для этого открываем sphere.ini и находим (или добавляем) следующий текст:

    Цитата
    // MySql configuration.
    MYSQL=1
    MySqlHost=localhost
    MySqlUser=root
    MySqlPassword=
    MySqlDatabase=sphere


    По умолчанию пользователь базы данных root с пустым паролем. В качестве названия базы данных я выбрал sphere, её мы создадим позже.

    Теперь запускаем сферу (spheresrv.exe). Если в логе сферы не видим ошибку ”MySQL connect fail” - значит подключение к базе прошло успешно. Закрываем сферу, она нам пока не нужна.

  3. В папке scripts находим файл sphere_serv_triggers.scp и открываем его блокнотом к примеру. Находим в нем функцию ”f_onserver_timer” и добавляем в конец:

    Цитата
    IF (<DB.Connected>==0)
    DB.Connect
    DB.Query "SET NAMES utf8"
    DB.Query "SET CHARACTER SET utf8"
    DB.Query "SET character_set_client='utf8'"
    DB.Query "SET character_set_connection='utf8'"
    DB.Query "SET character_set_results='utf8'"
    RETURN 0
    ENDIF

    DB.Execute "DELETE FROM clients"
    FOR i 0 <EVAL (<SERV.Clients>-1)>
    IF (<SERV.Client.<LOCAL.i>.IsOnline>==1)
    DB.Execute "INSERT INTO clients VALUES ("<SERV.Client.<LOCAL.i>.UID>","<SERV.Client.<LOCAL.i>.Name>","<SERV.Client.<LOCAL.i>.MEMORYFINDTYPE.memory_guild.LINK.ABBREV>",<SERV.Client.<LOCAL.i>.Karma>,<SERV.Client.<LOCAL.i>.Fame>,<SERV.Client.<LOCAL.i>.Kills>,<FVAL <SERV.Client.<LOCAL.i>.SkillTotal>>)""
    ENDIF
    ENDFOR


    Если функцию f_onserver_timer не нашли - ничего страшного, создайте её [FUNCTION f_onserver_timer] в конце файла (перед [eof]) и добавьте тот код что я написал выше.

    В двух словах расскажу что мы сделали. Мы определили функцию f_onserver_timer которая автоматически запускается сферой каждые N минут и проводит указанные действия. В данном случае функция проверяет есть ли подключение к базе, если есть: а) очищает таблицу clients. б) добавляет всех пользователей что сейчас онлайн в таблицу clients

    По умолчанию запуск f_onserver_timer в сфере отключен, поэтому открываем sphere.ini и находим:

    Цитата
    // Amount of minutes to call f_onserver_timer (0 disables this, default)
    TimerCall=0


    Я устанавливаю значение в 5 минут:

    Цитата
    // Amount of minutes to call f_onserver_timer (0 disables this, default)
    TimerCall=5


    Это означает что каждые 5 минут будет запускатся функция f_onserver_timer и обновлять в базе текущих пользователей онлайн. Дурные идеи типа живого статуса обновляющегося без задержки - выкиньте нафиг, это сильно убьет вашу базу. Если напрягает пять минут - поставьте одну, но при большом онлайне это будет грузить базу и сервер в целом

  4. Теперь нам понадобится создать эту самую базу ”sphere” и таблицу ”clients”. Запускаем с рабочего стола ярлычек ”Xampp Control panel” и нажимаем кнопку ”admin” рядом с ”mysql”. Нам открываем популярный инструмент для работы с базами - phpmyadmin

    (IMG:http://automum.od.ua/uosoft/2.jpg)

    Вводим название новой базы данных, а рядом обязательно указываем кодировку полей ”utf8_general_ci” (мы же умные люди и используем только utf8!) и нажимаем ”создать”.

    (IMG:http://automum.od.ua/uosoft/3.jpg)

    База создалась и появилась в левом меню. Кликаем по названию ”sphere (0)” и нам открывается страница таблиц этой базы. Естественно таблиц у нас там не каких еще нету. Так как у нас урок для новичков, рассказывать как в ручную создавать поля для таблицы и тп я не буду (хотя это достаточно просто), поэтому просто нажимайте кнопку ”SQL” в менюшке вверху и в появившемся окошке вводите следующий код:

    Цитата
    CREATE TABLE IF NOT EXISTS `clients` (
    `uid` varchar(255) NOT NULL,
    `name` varchar(255) NOT NULL,
    `ABBREV` varchar(255) NOT NULL,
    `karma` varchar(255) NOT NULL,
    `fame` varchar(255) NOT NULL,
    `kills` varchar(255) NOT NULL,
    `SkillTotal` varchar(255) NOT NULL,
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


    Нажимаем ОК и наша таблица создана.

    Запускаем нашу сферу, конектимся к ней хотя бы одним чаром и идем курить на указанный ”TimerCall” минут. Только окошко с phpmyadmin не закрывайте, еще понадобится.

    Когда указанное время истекло и функция добавление чаров в базу уже отработала - открываем нами любимый phpmyadmin и тыкаем на название таблицы ”clients” (в левой части страницы), а затем на кнопочку ”обзор” - в правой верхней части страницы.

    (IMG:http://automum.od.ua/uosoft/5.jpg)

    (IMG:http://automum.od.ua/uosoft/6.jpg)

    Если все окей и данные в базу добавились - тогда вы их сразу там и увидите:

    (IMG:http://automum.od.ua/uosoft/4.jpg)

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

  5. В нашем случае ваш сайт это http://localhost/ (локальный) или <a href=\"http://ваш_реальный_ip\" target=\"_blank\"><a href="http://ваш_реальный_ip" target="_blank">http://ваш_реальный_ip</a></a> (доступный для всех юзеров интернета). Открываем папку где устанавливали xampp (C:\xampp ?), открываем там папку htdocs и удаляем все что там внутри.

    Создаем файлик index.php следующего содержания:

    Цитата
    <?php
    // тут я указал наши данные для подключения к mysql
    $link = mysql_connect('127.0.0.1', 'root', '');
    if (!$link) {
    die('Could not connect: ' . mysql_error());
    }
    // название нашей базы
    mysql_select_db("sphere");
    // далем запроса в базу на получение всех пользователей
    $result = mysql_query("SELECT * FROM `clients` WHERE 1");
    // тег pre - для красивого вывода
    echo '<h1>Статистика</h1><pre>';
    // пробегаем по полученному массиву где $row это текущий пользователь
    while ($row = mysql_fetch_assoc($result)) {
    // выводим данные пользователя на экран
    print_r($row);
    }
    // закрываем тег
    echo '</pre>';
    // закрываем соединение с базой
    mysql_close($link);


    Теперь открываем браузер, вводим <a href="http://ваш_реальный_ip" target="_blank"><a href="http://ваш_реальный_ip" target="_blank">http://ваш_реальный_ip</a></a> - и вуаля, статистика прямо у вас на экране.

    (IMG:http://automum.od.ua/uosoft/7.jpg)

    Вы наверное ждали статистику в красивой зеленой табличке, а получили просто данные на экран. Но ведь это самое главное! Теперь вы умеете доставать данные с базы, а оформить их по своему это 10 минут времени и знания хотя бы 1й главы html учебника. Лень? Окей, немного передохну и опубликую в этой статье пример файла index.php с оформлением данных в виде таблицы.

    А вот если статистики совсем нет - тогда читаем ответ ниже.


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 23.10.2010, 21:21
Сообщение #2


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Вопрос: Открываю http://мой_реальный_ип/ и вижу только слово "Статистика"! В чем проблема???
Ответ: Скорее всего у вас нет данных в базе. Такое может произойти если чаров нету онлайн, или вы вошли чаром после того как функция сбора статистики - отработала. Подождите минут 5 и посмотрите


Вопрос: Как поставить пароль на root пользователя mysql?
Ответ: Через phpmyadmin, вкладка "привилегии".


Вопрос: Открываю http://мой_реальный_ип/ и пишет сервер не найден
Ответ: Скорее всего вы подключаетесь к интернету через роутер (тобиш свич). Для этого в настройках роутера найдите "Port Forwarding" (перенаправление портов) и перенаправляйте 80й порт вашего свича на 80й порт вашего компа


Вопрос: http://localhost/ работает, а http://мой_реальный_ип/ - нет. Почему?
Ответ: Смотри ответ выше


Вопрос: У меня сайт находится на другом хостинге, не там где сервер. Как мне на сайте вывести данные из http://мой_реальный_ип_сервера/ ???
Ответ: Самый простой способ:
На своем хостинге создайте файл statistic.php, откройте его и введите:
Цитата
<?php
// For PHP 5 and up
$handle = fopen("http://ваш_реальный_ип_сервера/", "rb");
$contents = stream_get_contents($handle);
fclose($handle);

ну и оформляйте все это дело в дизайн вашего сайта.

Второй вариант - перекопировать файл index.php из этого урока к вам на хостинг (предварительно переименовав). И изменить настройки подключения к базе с localhost, на ваш_реальный_ип_сервера. Если на сервере разрешено использовать mysql удаленно - значит будет работать


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 23.10.2010, 21:34
Сообщение #3


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Для вывода статуса в виде таблички - немного меняем наш index.php:

Цитата
<?php
// тут я указал наши данные для подключения к mysql
$link = mysql_connect('195.234.5.208', 'sphere', 'qJYyFx74RSFpWCcd');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
// название нашей базы
mysql_select_db("sphere");
// далем запроса в базу на получение всех пользователей
$result = mysql_query("SELECT * FROM `clients` WHERE 1");
// тег pre - для красивого вывода
?>
<table border="1" width="500">
<tr>
<td><b>Логин</b>
<td><b>Гильда</b>
<td><b>Карма</b>
<td><b>Фама</b>
<td><b>Убийства</b>
<td><b>Сум.скилл</b>
<?php
// пробегаем по полученному массиву где $row это текущий пользователь
while ($row = mysql_fetch_assoc($result)) {
// выводим данные пользователя на экран
?>
<tr>
<td><?php echo $row['name']?>
<td><?php echo $row['ABBREV']?>
<td><?php echo $row['karma']?>
<td><?php echo $row['fame']?>
<td><?php echo $row['kills']?>
<td><?php echo $row['SkillTotal']?>
<?php
}
?>
</table>
<?php
// закрываем соединение с базой
mysql_close($link);


(IMG:http://automum.od.ua/uosoft/8.jpg)


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mirage
сообщение 24.10.2010, 16:14
Сообщение #4


*******

Группа: Пользователи
Наличность: 0
Из: Иваново
Пользователь №: 13.089
Возраст: 35



Тема нормальная.
Только хотелось бы узнать в чем существенные преимущества mysql базы аккаунтов перед простой файловой?

PS очень бы неплохо было прикрепить подробное описание регистрации с сайта в mysql базу с последующим задействованием в игре. Либо вариант применяемый на некоторых серверах - связка аккаунта на сайте (форуме) с аккаунтом в игре. Оно конечно на любителя но в целях образования интересно.


--------------------
Изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 24.10.2010, 16:37
Сообщение #5


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Цитата(Mirage @ 24.10.2010, 16:14) *

Только хотелось бы узнать в чем существенные преимущества mysql базы аккаунтов перед простой файловой?


Ну это не актуальный вопрос на сегодня (IMG:style_emoticons/default/smile.gif) В данной статье рассматривается конкретно mysql статистика по сравнению со стандартной, вот её приемущества
  1. Мы не нагружаем файловую систему сервера
  2. Возможность расширеной лог системы кто когда входил, сколько времени был онлайн и тп
  3. Возможность организовать полное отслеживание у какого чара на сколько вырос скил за день, появилось золота, прокачался лвл и тп
  4. Использование графиков при выводе статистики
  5. И куча, куча другого
Тут все зависит от фантазии и навыков разработчика.

Цитата(Mirage @ 24.10.2010, 16:14) *
PS очень бы неплохо было прикрепить подробное описание регистрации с сайта в mysql базу с последующим задействованием в игре. Либо вариант применяемый на некоторых серверах - связка аккаунта на сайте (форуме) с аккаунтом в игре. Оно конечно на любителя но в целях образования интересно.


вопрос регистрации через mysql это уже тема другой темы, которую я кстати уже частично описал вот тут - https://forum.uokit.com/index.php?showt...19112&st=20


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Destruction
сообщение 24.10.2010, 17:25
Сообщение #6


**********

Группа: Администраторы
Наличность: 4
Пользователь №: 1.833



Цитата
В данном уроке мы будем рассматривать ситуацию когда сфера (у меня 56b), mysql и apache находятся на одной машине (сервере). Такой подход сильнее грузит сферу, но более понятен на старте новичкам.

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

Цитата
Это означает что каждые 5 минут будет запускатся функция f_onserver_timer и обновлять в базе текущих пользователей онлайн. Дурные идеи типа живого статуса обновляющегося без задержки - выкиньте нафиг, это сильно убьет вашу базу. Если напрягает пять минут - поставьте одну, но при большом онлайне это будет грузить базу и сервер в целом

Не согласен. Обновлять данные можно (я надеюсь можно?) когда персонаж входит/выходит из игры.
Обновление по первичному ключу базы в 100 тыс. записей будет занимать доли секунды и с базой ничего не сделает.

Цитата
DB.Execute "DELETE FROM clients"

Не DELETE, а TRUNCATE.

PS: Я лишь бегло пробежался по вашему уроку с целью выразить свое мнение, как веб-разработчика.


Цитата(Mirage @ 24.10.2010, 17:14) *
хотелось бы узнать в чем существенные преимущества mysql базы аккаунтов перед простой файловой?

MySQL хранит данные в файлах, если вы не знали.

В чем преимущество? - В том, что это специально предназначенный продукт реализующий большинство преимуществ реляционной СуБД.

О реляционных СуБД и их преимуществах можете почитать в интернете, в частности на mysql.com


--------------------
Discord: tatikom
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Kanibal
сообщение 24.10.2010, 17:56
Сообщение #7


********

Master
Сообщений: 1.337
Регистрация: 19.9.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.115
Возраст: 7



Постоянно выскакивает вот это:
Цитата

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ENGINE=InnoDB DEFAULT CHARSET=utf8' at line 9
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Soteric
сообщение 24.10.2010, 18:36
Сообщение #8


********

Master
Сообщений: 1.377
Регистрация: 7.8.2006
Группа: Пользователи
Наличность: 3227
Пользователь №: 7.166



Цитата
CREATE TABLE IF NOT EXISTS `clients` (
`uid` varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
`ABBREV` varchar(255) NOT NULL,
`karma` varchar(255) NOT NULL,
`fame` varchar(255) NOT NULL,
`kills` varchar(255) NOT NULL,
`SkillTotal` varchar(255) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Наверное запятая здесь на конце не нужна
Цитата
`SkillTotal` varchar(255) NOT NULL,

--
Цитата
$result = mysql_query("SELECT * FROM `clients` WHERE 1");

А это зачем?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 24.10.2010, 18:45
Сообщение #9


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



to Destruction

Ох как я не люблю этот бредовый флуд лишь бы выпендриться что "я тоже что то знаю". Ну ладно, отвечу вам на сообщение и надеюсь на этом засорение темы прекратится.

Вывод статус сервера из базы на стороннем хостинге - дело может быть очень геморройным. По умолчанию на серверах закрывают удаленное использование БД и было бы куча текса "как открыть mysql для сторонних подключений", а в целях безопасности еще и объяснять как открывать конкретно для IP своего хостинга что б не начали пресенговать базу лишними подключениями. Мне кажется подход все на одном сервере для новичков намного понятнее и удобнее. Считаешь иначе? Считай дальше..

А теперь по тексту:

Цитата
Нагрузка будет выше на сам сервер, а сфера может из-за этого тормозить, если на сервере недостаточно ресурсов.


А я что не так написал? Или мне нужно было уточнять ЧТО КОНКРЕТНО будет тормозить НА сервере или это имеет такую важную роль?! Мой урок не для даунов, а для новичков. Поэтому считаю разумным не объяснять что когда тормозит сервер из-за нехватки ресурсов - сфера тоже будет тормозить.

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


Для изучения моего урока человек не отходя от собственного домашнего компа где у него стоит сфера - качает xampp и поднимает веб-сервер за два клика. Хочешь рассказать как поднимать мускул на винде без веб-сервера, а потом настраивать сторонний софт для работы с базой - валяй, я использую для этого свой подход. А уж если закрыто удаленное подключение, то с базой работать только через "удаленный рабочий стол+сторонни_софт" что весьма не удобно. Я некому ничего не навязываю, я рассказываю свой подход если это еще не понятно. Хочешь рассказать другой подход - в виде отдельного урока.

Цитата
Не согласен. Обновлять данные можно (я надеюсь можно?) когда персонаж входит/выходит из игры.Обновление по первичному ключу базы в 100 тыс. записей будет занимать доли секунды и с базой ничего не сделает.


Можно. А нужно ли? Лично я использую кеширование данных на 5 минут и делаю выборку данных с базы не каждое обновление страницы. В вашем случае селект к базе будем делать каждый рефреш страницы. А стоит ли этого того? Мне кажется лишнее, достаточно "живого" статуса онлайн внутри игры.

Цитата
Не DELETE, а TRUNCATE.


Делит понятнее для новичков. Учитывая что работают два подхода, я выбрал тот что понятнее для прочтения кода.



to Kanibal
Угу, там лишняя запятая. Soteric правильно заметил.


to all
отредактируйте плиз свои сообщения что б вместо <code> было <quote>, то тема поползла(


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Kanibal
сообщение 24.10.2010, 19:17
Сообщение #10


********

Master
Сообщений: 1.337
Регистрация: 19.9.2009
Группа: Пользователи
Наличность: 0
Пользователь №: 12.115
Возраст: 7



А это пчему выскакивает:
Цитата

MySQL query "INSERT INTO clients VALUES ("06260","Kanibal","0",1272,10000,0,)" failed due to "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1"

(IMG:style_emoticons/default/blink.gif) ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 24.10.2010, 19:19
Сообщение #11


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Почему то у тебя :
Цитата
<FVAL <SERV.Client.<LOCAL.i>.SkillTotal>

Не отрабатывает. Сделай вот так тогда чисто для проверки:
Цитата
DB.Execute "INSERT INTO clients VALUES ("<SERV.Client.<LOCAL.i>.UID>","<SERV.Client.<LOCAL.i>.Name>","<SERV.Client.<LOCAL.i>.MEMORYFINDTYPE.memory_guild.LINK.ABBREV>",<SERV.Client.<LOCAL.i>.Karma>,<SERV.Client.<LOCAL.i>.Fame>,<SERV.Client.<LOCAL.i>.Kills>,0)""


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mirage
сообщение 24.10.2010, 20:39
Сообщение #12


*******

Группа: Пользователи
Наличность: 0
Из: Иваново
Пользователь №: 13.089
Возраст: 35



Цитата(Destruction @ 24.10.2010, 18:25) *

MySQL хранит данные в файлах, если вы не знали.
В чем преимущество? - В том, что это специально предназначенный продукт реализующий большинство преимуществ реляционной СуБД.
О реляционных СуБД и их преимуществах можете почитать в интернете, в частности на mysql.com

При всем моем уважении информация совершенно бессмысленна. Я конечно не гений как Шелдон и ТББ но с базами данных имел дело в процессе работы.
Вопрос (на который ответил автор темы, вполне удовлетворив меня своим ответом) возможно был не совсем корректно сформулирован, но был задан к тому что в сфере присутствует создание онлайн статуса штатными средствами. И мне не понятно зачем задействовать средства которые даже вы не в состоянии описать не прибегая к спец литературе. К слову по умолчанию обновление status.html стоит с минутной паузой и не сильно нагружает сервер.

К велосипеду тоже атомный двигатель можно прикрутить и получится нехреновая штука.

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


--------------------
Изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Destruction
сообщение 24.10.2010, 23:02
Сообщение #13


**********

Группа: Администраторы
Наличность: 4
Пользователь №: 1.833



Я был вежлив.. и буду (IMG:style_emoticons/default/smile.gif)

В ответ на твое мнение о моем комментарии - поделюсь своим мнением о твоем: нужно спокойнее относится к критике.

Цитата
А я что не так написал? Или мне нужно было уточнять ЧТО КОНКРЕТНО будет тормозить НА сервере или это имеет такую важную роль?! Мой урок не для даунов, а для новичков. Поэтому считаю разумным не объяснять что когда тормозит сервер из-за нехватки ресурсов - сфера тоже будет тормозить.

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

Цитата
Для изучения моего урока человек не отходя от собственного домашнего компа где у него стоит сфера - качает xampp и поднимает веб-сервер за два клика. Хочешь рассказать как поднимать мускул на винде без веб-сервера, а потом настраивать сторонний софт для работы с базой - валяй, я использую для этого свой подход. А уж если закрыто удаленное подключение, то с базой работать только через "удаленный рабочий стол+сторонни_софт" что весьма не удобно. Я некому ничего не навязываю, я рассказываю свой подход если это еще не понятно. Хочешь рассказать другой подход - в виде отдельного урока.

А я лишь делюсь своим мнением, чтобы ваше не было единственно верным. Зачем в штыки-то ?

Цитата
Можно. А нужно ли? Лично я использую кеширование данных на 5 минут и делаю выборку данных с базы не каждое обновление страницы. В вашем случае селект к базе будем делать каждый рефреш страницы. А стоит ли этого того? Мне кажется лишнее, достаточно "живого" статуса онлайн внутри игры.

Вы не уловили суть. Еще раз вас процитирую:
>>Дурные идеи типа живого статуса обновляющегося без задержки - выкиньте нафиг, это сильно убьет вашу базу.
Это бред. Так яснее, что я хотел сказать?

Цитата
Делит понятнее для новичков. Учитывая что работают два подхода, я выбрал тот что понятнее для прочтения кода.

Есть принципиальная разница между двумя командами.

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

Да и насчет понятнее - сомнительно, так ли понятнее использовать неправильную команду?

http://dev.mysql.com/doc/refman/5.0/en/truncate-table.html

Почитайте, узнаете новую для себя команду.

Mirage, когда я отвечал - я видимо не заметил его ответ. В любом случае - все то, что написал автор вы можете найти самостоятельно в интернете и даже больше, что я собственно говоря и посоветовал.

Мне даже будет не лень заглянуть в гугл и привести из него цитаты соответствующие каждому пункту, который указал автор. Нужно?

Добавлено:
Вы, кстати, не там ставите кэширование. Запись в локальную СуБД, раз уж вы её используете - операция слабо напряжная.

А вот дергать каждый раз сервер спрашивая с него данные - весьма затратно.

Соответственно - там кэширование можете убрать и сделать обновление по заходу/выходу, нагрузки это не даст. А вот где данные берутся:

Код
$cache_file = "accounts.info"; // файл кэша
$cache_time = 5*60; // время кэширования - 5 минут
if( ! is_readable( $cache_file ) || time() - $cache_time > filemtime( $cache_file ) ){
    $content = file_get_contents("http://ваш_реальный_ip_сервера/");
    file_put_contents( $cache_file, $content );
}
else{
    $content = file_get_contents( $cache_file );
}


Тут может быть проблемка, в случае двух параллельных запросов.. Но это уже отдельная тема про кэш для highload-проектов - с местными нагрузками проблемы не будет.

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


--------------------
Discord: tatikom
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 24.10.2010, 23:26
Сообщение #14


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Хватит засорять тему всяким бредом? Ага?

Людей которые заинтересованы в материале читать весь этот бред будет напрягать. Лучше потрать свои силы и блесни знаниями отвечая КОНСТРУКТИВНО людям, которые возможно зададут тут свои вопросы.


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Warstone
сообщение 25.10.2010, 11:02
Сообщение #15


*********

Группа: Модераторы
Наличность: 0
Пользователь №: 10.905
Возраст: 25



Мда.. DAMNED KING, ты какой шард держишь-то? Мне просто чтоб туда не попасть ненароком с таким неадекватным стаффом. Дестракшн пока верные замечания давал. Ну и от себя добавлю: Это гораздо медленней решение. Фаил на отдачу закешируется уже конечный, а с ПхП вы каждый раз его будите генерировать. Поэтому ваше решение отъедает заведомо больше ресурсов.


--------------------
Do. Or do not. There is no Try!
© Master Joda, Dagobah, Star Wars: Episode V.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Phistan
сообщение 25.10.2010, 11:22
Сообщение #16


****

Apprentice
Сообщений: 253
Регистрация: 30.4.2010
Группа: Пользователи
Наличность: 0
Из: Амстердам
Пользователь №: 12.689
Возраст: 99



DAMNED KING, советую не обращать на них внимания, нервы сохранишь... Ибо бестолковый спор


--------------------
Auch der Mutigste von uns hat nur selten den Mut zu dem, was er eigentlich weiß…
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
remiks
сообщение 25.10.2010, 14:24
Сообщение #17


****

Apprentice
Сообщений: 284
Регистрация: 16.7.2007
Группа: Пользователи
Наличность: 0
Пользователь №: 9.943
Возраст: 18



Очень полезный материал приношу свою благодарность DAMNED KING. Большое спс......


--------------------
John Gaspar
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Mirage
сообщение 25.10.2010, 15:10
Сообщение #18


*******

Группа: Пользователи
Наличность: 0
Из: Иваново
Пользователь №: 13.089
Возраст: 35



Поправьте меня если я ошибаюсь но мне кажется Destruction и DAMNED KING обсуждая (не будем говорить "споря") обновление статуса говорят о разных вещах и как следствие оба правы и оба ошибаются.
Если задаться целью отображать только количество человек онлайн то более подходит способ предложенный Destruction (записывать изменения при конекте и дисконекте пользователя), если же необходимо динамически отслеживать изменение персонажа на предмет скиллов, убийств, нахождения в гильдии то без передергивания по таймеру не обойтись. Но правильно написанное обновление не приведет к видимым сбоям. В конце концов у нас не миллиарды записей чтобы затормозить сервер уменьшением времени обработки. Ногами только не бейте - я все таки не на том уровне пока что нахожусь чтобы спорить на равных (IMG:style_emoticons/default/wink.gif)


Материал для ознакомления представлен интересный для средней силы скриптера который уже не задает вопроса "а куда сохранять код скрипта O_о" и который может изменить чтото под себя (если не получается написать с 0). Для более углубленного изучения лучше будет воспользоваться технической литературой по языкам программирования, верстке html и php страниц и скульным базам.

PS автору все таки хочется пожелать чуть большей сдержанности. Конечно не приятно когда ктото критикует труд но любая критика имеет право быть - не все могут оптимальный вариант сразу найти. Ктото может посоветовать более простое или (иногда) правильное решение. Тем более что форум и нужен для ОБСУЖДЕНИЯ. А насчет почистить флуд есть модераторы. А так, автор - молоток. Пиши исче.


--------------------
Изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 25.10.2010, 15:28
Сообщение #19


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Цитата(Warstone @ 25.10.2010, 11:02) *

Мда.. DAMNED KING, ты какой шард держишь-то? Мне просто чтоб туда не попасть ненароком с таким неадекватным стаффом. Дестракшн пока верные замечания давал. Ну и от себя добавлю: Это гораздо медленней решение. Фаил на отдачу закешируется уже конечный, а с ПхП вы каждый раз его будите генерировать. Поэтому ваше решение отъедает заведомо больше ресурсов.


Я не держу шард, так что не попадешь (IMG:style_emoticons/default/smile.gif) А т.к. стафом я не являюсь, то вполне имею право быть не адекватным (в вашем понимании) (IMG:style_emoticons/default/biggrin.gif) С Дистракшином мы уже все обсудили, он не понял меня, я не понял его. В данном примере не идет разговор про оптимизацию и как это все дело можно сделать лучше. Я говорил про то что если использовать mysql рядом с сферовым сервером, а хостинг - на другом сервере : тогда сталкнемся с кое какой проблемой. При заходе на страницу статистики будет происходить коннект у удаленному серверу mysql для выборки данных что достаточно медленно (как минимум 1-2 сек при хорошем коннекте, а то и больше), а потом еще время на обработку данных и её вывод. Что бы такого не происходило я и предложил кеширование данных каждые 5 минут, что б не подключатся к удаленной БД каждое обновление странички статуса, а брать данные с кеша. При работе с кешем в данном случае скорость будет на порядок выше, а нагрузка на базу на несколько порядков ниже т.к. будет идти только 1 выборка в течении 5 минут, а не столько раз сколько обновлена страница.

Вот собственно это была одна из причин спора которую мы уже решили в личке. Если вы считаете что кеширование в описанном мною способе лишнее и есть более быстрые способы - готов вас выслушать.

Цитата(Phistan @ 25.10.2010, 11:22) *

DAMNED KING, советую не обращать на них внимания, нервы сохранишь... Ибо бестолковый спор


ага, спс. самому не нравится засырание темы всякими "у кого яйца круче"

Цитата(remiks @ 25.10.2010, 14:24) *

Очень полезный материал приношу свою благодарность DAMNED KING. Большое спс......


пожалуйста (IMG:style_emoticons/default/smile.gif)

Цитата(Mirage @ 25.10.2010, 15:10) *

...


Да мы с ним просто о разных вещах говорили. В любом случае я его понял, он надеюсь меня тоже.


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
inkvizitor
сообщение 28.3.2011, 11:18
Сообщение #20


*

Registred
Сообщений: 7
Регистрация: 2.3.2004
Группа: Пользователи
Наличность: 0
Пользователь №: 1.607



Код
MySQL query "INSERT INTO clients VALUES ("0b38c","ololo","0",0,0,0,<FVAL 6103)


Сфера пишет.
Не могу понять почему.

Точнее даже не могу понять откуда он берет значение <FVAL 6103 ошибка точно в нем, но откуда берет его сфера ) не понятно.


--------------------
I am go'in script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

4 страниц V  1 2 3 > » 
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 1:39
Designed by Nickostyle