Forum Webscript.Ru

Программирование => PHP => Тема начата: Falcon от 15 Января 2005, 18:35:30

Название: Нужно облегчить игру
Отправлено: Falcon от 15 Января 2005, 18:35:30
Есть у нас онлайн проэкт "Сказ о Змие Горыныче" http://zmiy.iswith.us/
Это просто педеланная на словянский мотив буржуйская игра Logd.
Проблема в том что в игре очень много обращенийк БД и если играет порядка 80-ти человек одновременно то сервак не выдерживает нагрузки.
Сейчас мы занимаемся переделкой http://www.mikportal.org/forum/index.php?showtopic=5237&view=getnewpost
и у меня возникают вопросы. как сделать чтобы игра поддерживала как можно больше народа одновременно?
Название: Нужно облегчить игру
Отправлено: CGVictor от 16 Января 2005, 09:01:45
Цитировать
Falcon:
очень много обращенийк БД

код в студию! (или это не моя фраза?)
Название: Нужно облегчить игру
Отправлено: Falcon от 26 Января 2005, 01:59:42
Вот пример. Скрипты дл работы с базой. Может что то можно убрать? Или сменить.

//do some cleanup here to make sure magic_quotes_gpc is ON, and magic_quotes_runtime is OFF, and error reporting is all but notice.
error_reporting (E_ALL ^ E_NOTICE);

// magic_quotes_gpc - автоматическая обработка кавычек и апострафов
// если она отключено, то экранируем кавычки вручную
if (!get_magic_quotes_gpc())
{
        set_magic_quotes($_GET);
        set_magic_quotes($_POST);
        set_magic_quotes($_SESSION);
        set_magic_quotes($_COOKIE);
        set_magic_quotes($HTTP_GET_VARS);
        set_magic_quotes($HTTP_POST_VARS);
        set_magic_quotes($HTTP_COOKIE_VARS);
        ini_set("magic_quotes_gpc",1);
}

// заключать ли данные в автокавычки во время выполнения
set_magic_quotes_runtime(0);

// функция экранирования кавычек
function set_magic_quotes(&$vars)
{
       if (is_array($vars))
       {
                reset($vars);
                while (list($key,$val) = each($vars))
                        set_magic_quotes($vars[$key]);
       }
       else
       {
                $vars = addslashes($vars);
       }
}

// тип базы данных
define(\'DBTYPE\',"mysql");

$dbqueriesthishit=0;

// формирует запрос к базе данных
function db_query($sql)
{
        global $session, $dbqueriesthishit;
        $dbqueriesthishit++;
        $fname = DBTYPE."_query";
        $r = $fname($sql) or die(($session[user][superuser]>=3 || 1?"
".HTMLEntities($sql)."
":"").db_error(LINK));
        return $r;
}

// в случае ошибки выводит сообщение
function db_error($link)
{
        $fname = DBTYPE."_error";
        $r = $fname($link);
        return $r;
}

// извлекает каждую строку из результируемого набора и возвращает его в виде ассоциативного масива
function db_fetch_assoc($result)
{
        $fname = DBTYPE."_fetch_assoc";
        $r = $fname($result);
        return $r;
}

// количество записей
function db_num_rows($result)
{
        $fname = DBTYPE."_num_rows";
        $r = $fname($result);
        return $r;
}

// возвращает число затронуиых прошлой операцией рядов
function db_affected_rows($link=false)
{
        $fname = DBTYPE."_affected_rows";
        if ($link===false)
        {
                $r = $fname();
        }
        else
        {
                $r = $fname($link);
        }
        return $r;
}

// соединяемся с базой данных
function db_pconnect($host,$user,$pass)
{
        $fname = DBTYPE."_pconnect";
        $r = $fname($host,$user,$pass);
        return $r;
}

// выбираем базу данных
function db_select_db($dbname)
{
        $fname = DBTYPE."_select_db";
        $r = $fname($dbname);
        return $r;
}

// освобождаем память
function db_free_result($result)
{
        $fname = DBTYPE."_free_result";
        $r = $fname($result);
        return $r;
}
?>
Название: Нужно облегчить игру
Отправлено: Меняздесьдавнонет от 26 Января 2005, 10:27:02
очень много лишнего, но ничего критичного.
Название: Нужно облегчить игру
Отправлено: Antoxa от 26 Января 2005, 11:00:47
php fastcgi(отдельно для обработки игры, чтобы сильно много не плодить процессов) + _pconnect

и уже полегче буддет, хотя не особо :)

собсна радикальное решение - не лазить в базу почти никогда.
юзать memcache, или демона наколбасить на пхп хотябы.
Название: Нужно облегчить игру
Отправлено: CGVictor от 26 Января 2005, 16:06:01
Цитировать
Antoxa:
+ _pconnect

Уверен?
Название: Нужно облегчить игру
Отправлено: Меняздесьдавнонет от 26 Января 2005, 16:29:11
CGVictor исчезни
Название: Нужно облегчить игру
Отправлено: CGVictor от 26 Января 2005, 16:54:57
RomikChef
[off]Исчезаю, но с тебя обьяснение...[/off]
Название: Нужно облегчить игру
Отправлено: Falcon от 27 Января 2005, 00:34:44
Antoxa
Цитировать
собсна радикальное решение - не лазить в базу почти никогда.
юзать memcache, или демона наколбасить на пхп хотябы.

Можно на этом момента подробнее. Где можно пример рабочего демона посмотреть? И как может быть демон на пыхпыхе? Ведь хостер ограничил время выполнения скрипта в настройках...

RomikChef
Что именно лишнее?

2Алл, обьясните плиз вот этот момент

Цитировать
$fname = DBTYPE."_select_db";
$r = $fname($dbname);

Что будет если переменную вложить в параметры другой переменной??? они сливаются или как?
Название: Нужно облегчить игру
Отправлено: Меняздесьдавнонет от 27 Января 2005, 01:49:11
например - вот это
ini_set("magic_quotes_gpc",1);
и вся это псевдокросплатформенная либа для работы с бд.

Цитировать
Falcon:
Что будет если переменную вложить в параметры другой переменной

у переменных параметров не бывает.
а синтаксис языка рекомендую подучить.не помешает
Название: Нужно облегчить игру
Отправлено: Falcon от 27 Января 2005, 23:59:16
RomikChef
Цитировать

у переменных параметров не бывает.
а синтаксис языка рекомендую подучить.не помешает

Значит неправильно сформулировал. Меня инересует именно конкретный пример. В книге я такого не видел.

Еще вопрос появился.
Если сделать табицы типа НЕАР. Это поидее должно намного быстродействие увеличить. И делать дамп базы например каждые пять минут. Ну как? Может такое сработать? Или это еще и от хостинга зависит?
Название: Нужно облегчить игру
Отправлено: Меняздесьдавнонет от 28 Января 2005, 00:59:19
оптимизировать надо не таблицы.
Название: Нужно облегчить игру
Отправлено: Falcon от 29 Января 2005, 01:54:30
RomikChef
А что надо?

Вот с этим куском кода разобрался
Цитировать
$fname = DBTYPE."_select_db";
$r = $fname($dbname);

В данном случае выполняется функция mysql_select_db($dbname). А в переменную $r попадает результат - true or false. Правильно?
Название: Нужно облегчить игру
Отправлено: Меняздесьдавнонет от 29 Января 2005, 11:38:31
Цитировать
Falcon:
А что надо?

оптимизировать надо то, что тормозит.
Если у тебя в машине заклинили тормоза, то установка более мощного двигателя не ускорит её.

чтобы ускорить машину, надо не тыкать пальцем в небо спрашивая встречных-поперечных "А если колёса побольше поставить - будет быстрее?". А сначала определить причину неисправности.

Ферштеен?
Название: Нужно облегчить игру
Отправлено: Antoxa от 29 Января 2005, 22:29:21
Цитировать
CGVictor:
Уверен?

да

Цитировать
Falcon:
Можно на этом момента подробнее. Где можно пример рабочего демона посмотреть? И как может быть демон на пыхпыхе? Ведь хостер ограничил время выполнения скрипта в настройках...

1. где посмотреть - бороться, искать, найти и перепрятать.
2. может быть демон на чем угодно.
3. насчет времени: set_time_limit(0) + php cli + свой php.ini ? если это возможно у хостера, хз. какие хостеры, довольно странно хоститься за 5 баксов в месяц и делать онлайн-игру.

Цитировать
RomikChef:
оптимизировать надо то, что тормозит.

ну вроде человек сообщил, что у него база тормозит, или я плохо читал? :)
Название: Нужно облегчить игру
Отправлено: Макс от 30 Января 2005, 02:22:29
Цитировать
Antoxa:
set_time_limit(0) + php cli

в php-cli время работы скрипта по умолчанию неограничено, поэтому set_time_limit(0) - лишнее

Falcon:
насчет того скрипта что ты привел. Тормозит чаще всего не сама работа ПХП с БД, а запросы, которые выполняются в БД. Поэтому смотреть надо структуру БД и запросы.
А вообще все это - гадание на кофейной гуще. Ты уже определил какие участки в твоих скриптах тормозят ?
Название: Нужно облегчить игру
Отправлено: Falcon от 31 Января 2005, 02:10:38
Да там все тормозит... Я когда в common.php лезу, то сам тормозить начинаю... Голова пухнет. Такой бардак!!!

Начал переписывать с нуля. Изначально оптимизируя код. Чтобы ни одного лишнего запроса...
Все вопросы буду в этой теме задавать.
Название: Нужно облегчить игру
Отправлено: Antoxa от 31 Января 2005, 02:49:29
Цитировать
Falcon:
Начал переписывать с нуля. Изначально оптимизируя код. Чтобы ни одного лишнего запроса...

слишком ранняя оптимизация - зло :)
хотя слишком поздняя тоже :)

Цитировать
Макс:
в php-cli время работы скрипта по умолчанию неограничено, поэтому set_time_limit(0) - лишнее

хм, и правда, это дело даже поменять в php.ini нельзя.
и даже set_time_limit(10) все равно нифига не меняет :)
забавно.
Название: Нужно облегчить игру
Отправлено: Antoxa от 31 Января 2005, 03:15:09
и зачем это извращение с cli + set_time_limit() собсна, непойму.
Название: Нужно облегчить игру
Отправлено: Меняздесьдавнонет от 31 Января 2005, 11:03:43
Цитировать
Falcon:
Изначально оптимизируя код.

хахахахаха!
"оптимизируя"!
Ой не могу! уморил :-))))))
Название: Нужно облегчить игру
Отправлено: Falcon от 01 Февраля 2005, 01:15:45
RomikChef
слушай. по твоим постам я вижу что ты считаешь себя или сильно умным или сильно веселым...
я понимаю что набрать 4807 сообщений за 3ри года непросто. но если они все несли столько же смысла сколько твои посты в этом топе, то ты просто обычный флудер.
Название: Нужно облегчить игру
Отправлено: Меняздесьдавнонет от 01 Февраля 2005, 12:13:45
ты хочешь обсудить, какой я флудер?
с удовольствием продолжу эту тему :-)

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

Причём, в общем-то, понятно. Если не хватает уровня знаний понять и исправить истинные причины - то человек начинает исправлять мелкие, доступные. И это не беда.
Была бы не беда, если бы у него была адекватная оценка своих знаний и способностей. Ему бы сказали, как правиьлно, он бы стал учиться.
А когда нет адекватной самооценки, когда обидки со слезами затмевают все вокруг - тут медицина бессильна.
Человек, который мало знает, но обижается, когда ему на это указывают, называется ламером.
поздравляю
Название: Нужно облегчить игру
Отправлено: Lutik от 01 Февраля 2005, 14:04:52
Falcon, а как ты оптимизируешь изначально код? Как показывает практика это невозможно делать изначально! Оптимизация кода начнется на уровне отладки твоего скрипта, но не как не раньше.
Название: Нужно облегчить игру
Отправлено: Falcon от 01 Февраля 2005, 22:25:47
RomikChef
Цитировать

Человек, который мало знает, но обижается, когда ему на это указывают, называется ламером.
поздравляю

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

Lutik
Ну может неверно сказал. Просто я отталкиваюсь от готового скрипта. Вот оптимизируя его я пишу новый.
Название: Нужно облегчить игру
Отправлено: Меняздесьдавнонет от 01 Февраля 2005, 23:24:36
Так ты ж вопросов не задавал
ты поставил нас в известность о том, что ты собираешься переписывать код.
при том, что
а) очевидно, что знаний твоих не хватает на то, чтобы исполнить декларацию об оптимальном коде
б) и самое главное. тебе, после того, как ты задал вопрос, не ответили - "переписывай код с нуля". Тебе ответили - найди тормозные места и переписывай их.

Какой смысл задавать вопросы, если ты все равно не следуешь ответам?
Название: Нужно облегчить игру
Отправлено: Falcon от 07 Февраля 2005, 01:57:19
RomikChef
ок. извини. обещаю исправится.

Вопрос №1.
Как проще сделать вывод по шаблону.
Тоесть есть у меня в файле style.html
Что то типа
{title}
А в скрипте переменная (например $title).

Теперь мне нужно прочитать файл в переменную, вставить содержимое переменной вместо {title} и вывести все это на экран.
Нужно сделать так чтобы ресурсов кушало как можно меньше, а то слышал что при таком способе вывода страница дважды парсится...
Вобще посоветуйте как лучше оранизовать. Если можно с примерами.

вот что у меня уже готово http://www.mikportal.org/forum/uploads/user-121-1107729187.jpg
Название: Нужно облегчить игру
Отправлено: Меняздесьдавнонет от 07 Февраля 2005, 09:01:30
забей.

это всё не имеет смысла.
ты не можешь понять, что тебе говорят.
физически.
мы с тобой разговариваем на разных языках.
Я два раза повтороил простую мысль - что оптимизировать надо ТО, ЧТО ТОРМОЗИТ. Сейчас. Реально.
А не то, про что ты краем уха где-то что-то слышал, что оно два раза парсится.

Я прекрасно понимаю, что тебе это два раза парсится понятно, а реальные проблемы у тебя просто опыта не хватает понять.
поэтому и забей.
Название: Нужно облегчить игру
Отправлено: Falcon от 08 Февраля 2005, 01:38:42
RomikChef
не ну ты рально клевый модер :)
если я забью, то опыта и не будет.
ладно. забей. зайду сюда через месяц. тогда и поговорим.
Название: Нужно облегчить игру
Отправлено: Antoxa от 08 Февраля 2005, 12:11:15
все говорят что вернутся :)
Название: Нужно облегчить игру
Отправлено: Меняздесьдавнонет от 08 Февраля 2005, 13:51:42
никто не говорит, что опыта не будет.
просто опыт в работе со строками не имеет никакого отношения к опыту оптимизации.

и никакой опыт вообще не требуется для того, тобы прочесть то, что тебе пишут простым русским языком
Название: Нужно облегчить игру
Отправлено: Falcon от 10 Февраля 2005, 02:31:30
http://zmiy2.iswith.us/
Название: Нужно облегчить игру
Отправлено: Falcon от 26 Марта 2005, 02:33:04
ну вот. как и обещал. прошло немножко больше месяца.я сделал хороший кусок работы. пока нету боев и основных зданий. но уже работает в несколько раз быстрее.