Forum Webscript.Ru
Программирование => PHP => Тема начата: Falcon от 15 Января 2005, 18:35:30
-
Есть у нас онлайн проэкт "Сказ о Змие Горыныче" http://zmiy.iswith.us/
Это просто педеланная на словянский мотив буржуйская игра Logd.
Проблема в том что в игре очень много обращенийк БД и если играет порядка 80-ти человек одновременно то сервак не выдерживает нагрузки.
Сейчас мы занимаемся переделкой http://www.mikportal.org/forum/index.php?showtopic=5237&view=getnewpost
и у меня возникают вопросы. как сделать чтобы игра поддерживала как можно больше народа одновременно?
-
Falcon:
очень много обращенийк БД
код в студию! (или это не моя фраза?)
-
Вот пример. Скрипты дл работы с базой. Может что то можно убрать? Или сменить.
//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;
}
?>
-
очень много лишнего, но ничего критичного.
-
php fastcgi(отдельно для обработки игры, чтобы сильно много не плодить процессов) + _pconnect
и уже полегче буддет, хотя не особо :)
собсна радикальное решение - не лазить в базу почти никогда.
юзать memcache, или демона наколбасить на пхп хотябы.
-
Antoxa:
+ _pconnect
Уверен?
-
CGVictor исчезни
-
RomikChef
[off]Исчезаю, но с тебя обьяснение...[/off]
-
Antoxa
собсна радикальное решение - не лазить в базу почти никогда.
юзать memcache, или демона наколбасить на пхп хотябы.
Можно на этом момента подробнее. Где можно пример рабочего демона посмотреть? И как может быть демон на пыхпыхе? Ведь хостер ограничил время выполнения скрипта в настройках...
RomikChef
Что именно лишнее?
2Алл, обьясните плиз вот этот момент
$fname = DBTYPE."_select_db";
$r = $fname($dbname);
Что будет если переменную вложить в параметры другой переменной??? они сливаются или как?
-
например - вот это
ini_set("magic_quotes_gpc",1);
и вся это псевдокросплатформенная либа для работы с бд.
Falcon:
Что будет если переменную вложить в параметры другой переменной
у переменных параметров не бывает.
а синтаксис языка рекомендую подучить.не помешает
-
RomikChef
у переменных параметров не бывает.
а синтаксис языка рекомендую подучить.не помешает
Значит неправильно сформулировал. Меня инересует именно конкретный пример. В книге я такого не видел.
Еще вопрос появился.
Если сделать табицы типа НЕАР. Это поидее должно намного быстродействие увеличить. И делать дамп базы например каждые пять минут. Ну как? Может такое сработать? Или это еще и от хостинга зависит?
-
оптимизировать надо не таблицы.
-
RomikChef
А что надо?
Вот с этим куском кода разобрался
$fname = DBTYPE."_select_db";
$r = $fname($dbname);
В данном случае выполняется функция mysql_select_db($dbname). А в переменную $r попадает результат - true or false. Правильно?
-
Falcon:
А что надо?
оптимизировать надо то, что тормозит.
Если у тебя в машине заклинили тормоза, то установка более мощного двигателя не ускорит её.
чтобы ускорить машину, надо не тыкать пальцем в небо спрашивая встречных-поперечных "А если колёса побольше поставить - будет быстрее?". А сначала определить причину неисправности.
Ферштеен?
-
CGVictor:
Уверен?
да
Falcon:
Можно на этом момента подробнее. Где можно пример рабочего демона посмотреть? И как может быть демон на пыхпыхе? Ведь хостер ограничил время выполнения скрипта в настройках...
1. где посмотреть - бороться, искать, найти и перепрятать.
2. может быть демон на чем угодно.
3. насчет времени: set_time_limit(0) + php cli + свой php.ini ? если это возможно у хостера, хз. какие хостеры, довольно странно хоститься за 5 баксов в месяц и делать онлайн-игру.
RomikChef:
оптимизировать надо то, что тормозит.
ну вроде человек сообщил, что у него база тормозит, или я плохо читал? :)
-
Antoxa:
set_time_limit(0) + php cli
в php-cli время работы скрипта по умолчанию неограничено, поэтому set_time_limit(0) - лишнее
Falcon:
насчет того скрипта что ты привел. Тормозит чаще всего не сама работа ПХП с БД, а запросы, которые выполняются в БД. Поэтому смотреть надо структуру БД и запросы.
А вообще все это - гадание на кофейной гуще. Ты уже определил какие участки в твоих скриптах тормозят ?
-
Да там все тормозит... Я когда в common.php лезу, то сам тормозить начинаю... Голова пухнет. Такой бардак!!!
Начал переписывать с нуля. Изначально оптимизируя код. Чтобы ни одного лишнего запроса...
Все вопросы буду в этой теме задавать.
-
Falcon:
Начал переписывать с нуля. Изначально оптимизируя код. Чтобы ни одного лишнего запроса...
слишком ранняя оптимизация - зло :)
хотя слишком поздняя тоже :)
Макс:
в php-cli время работы скрипта по умолчанию неограничено, поэтому set_time_limit(0) - лишнее
хм, и правда, это дело даже поменять в php.ini нельзя.
и даже set_time_limit(10) все равно нифига не меняет :)
забавно.
-
и зачем это извращение с cli + set_time_limit() собсна, непойму.
-
Falcon:
Изначально оптимизируя код.
хахахахаха!
"оптимизируя"!
Ой не могу! уморил :-))))))
-
RomikChef
слушай. по твоим постам я вижу что ты считаешь себя или сильно умным или сильно веселым...
я понимаю что набрать 4807 сообщений за 3ри года непросто. но если они все несли столько же смысла сколько твои посты в этом топе, то ты просто обычный флудер.
-
ты хочешь обсудить, какой я флудер?
с удовольствием продолжу эту тему :-)
я вообще люблю языком почесать.
Особенно, когда автору интереснее обсуждать меня, а не свой вопрос.
Особенно, если автор настолько не ориентируется в реальности, что полагает, будто он можешь написать хоть строчку оптимаьлно при том, что не знает даже базового синтаксиса языка.
Причём, в общем-то, понятно. Если не хватает уровня знаний понять и исправить истинные причины - то человек начинает исправлять мелкие, доступные. И это не беда.
Была бы не беда, если бы у него была адекватная оценка своих знаний и способностей. Ему бы сказали, как правиьлно, он бы стал учиться.
А когда нет адекватной самооценки, когда обидки со слезами затмевают все вокруг - тут медицина бессильна.
Человек, который мало знает, но обижается, когда ему на это указывают, называется ламером.
поздравляю
-
Falcon, а как ты оптимизируешь изначально код? Как показывает практика это невозможно делать изначально! Оптимизация кода начнется на уровне отладки твоего скрипта, но не как не раньше.
-
RomikChef
Человек, который мало знает, но обижается, когда ему на это указывают, называется ламером.
поздравляю
Я по природе не обидчивый. Я реально оцениваю свой уровень знаний по php и стремлюсь его улучшить. Думаю ты понимаешь, что если бы мой уровень был более высоким, то и тему эту я не создавал.
Просто форумы созданы для того чтобы люди задавали те вопросы на которые хотят услышать ответы.
Lutik
Ну может неверно сказал. Просто я отталкиваюсь от готового скрипта. Вот оптимизируя его я пишу новый.
-
Так ты ж вопросов не задавал
ты поставил нас в известность о том, что ты собираешься переписывать код.
при том, что
а) очевидно, что знаний твоих не хватает на то, чтобы исполнить декларацию об оптимальном коде
б) и самое главное. тебе, после того, как ты задал вопрос, не ответили - "переписывай код с нуля". Тебе ответили - найди тормозные места и переписывай их.
Какой смысл задавать вопросы, если ты все равно не следуешь ответам?
-
RomikChef
ок. извини. обещаю исправится.
Вопрос №1.
Как проще сделать вывод по шаблону.
Тоесть есть у меня в файле style.html
Что то типа
{title}
А в скрипте переменная (например $title).
Теперь мне нужно прочитать файл в переменную, вставить содержимое переменной вместо {title} и вывести все это на экран.
Нужно сделать так чтобы ресурсов кушало как можно меньше, а то слышал что при таком способе вывода страница дважды парсится...
Вобще посоветуйте как лучше оранизовать. Если можно с примерами.
вот что у меня уже готово http://www.mikportal.org/forum/uploads/user-121-1107729187.jpg
-
забей.
это всё не имеет смысла.
ты не можешь понять, что тебе говорят.
физически.
мы с тобой разговариваем на разных языках.
Я два раза повтороил простую мысль - что оптимизировать надо ТО, ЧТО ТОРМОЗИТ. Сейчас. Реально.
А не то, про что ты краем уха где-то что-то слышал, что оно два раза парсится.
Я прекрасно понимаю, что тебе это два раза парсится понятно, а реальные проблемы у тебя просто опыта не хватает понять.
поэтому и забей.
-
RomikChef
не ну ты рально клевый модер :)
если я забью, то опыта и не будет.
ладно. забей. зайду сюда через месяц. тогда и поговорим.
-
все говорят что вернутся :)
-
никто не говорит, что опыта не будет.
просто опыт в работе со строками не имеет никакого отношения к опыту оптимизации.
и никакой опыт вообще не требуется для того, тобы прочесть то, что тебе пишут простым русским языком
-
http://zmiy2.iswith.us/
-
ну вот. как и обещал. прошло немножко больше месяца.я сделал хороший кусок работы. пока нету боев и основных зданий. но уже работает в несколько раз быстрее.