Когда и как лучше сохранять данные?
1. При дисконекте
2. Как только переменная изменится. Т.е. апнул лвл, сохранил в БД и так далее
Вид для печати
Когда и как лучше сохранять данные?
1. При дисконекте
2. Как только переменная изменится. Т.е. апнул лвл, сохранил в БД и так далее
При изменениях значений переменной + при выходе с сервера.
Но и такое бывает что несколько игроков меняют переменные часто,
если представить что человек так 100 будут теребонькать бедную БДшку то она залагает, а то и ляжет от усталости...
Так что я бы советовал припаять ограничение соединений по времени при обращении игроков к БД, чтоб не дудосили.
BlueG в своем плагине использует thread, вряд ли что то залагает.
А теперь представим, что я доначу на сервер 10000 рублей и в это время сервер заддосили, а сохранения стояло только при дисконнкте = откату сервера. (До предыдущих сохранении) + мой деньги ушли создателю. Истории транзакции у меня нет, доказать не чем, что я пожертвовал серверу 10000 рублей. Ваши действия?
P.S: Я знаю, что донат надо сохранять сразу при изменений, но видь это может произойти и с другими переменными?
У них, как я понимаю, имеется синхронизация MySQL с Личным Кабинетом на сайте (иначе что может значит "ЛК"?). Вот через него он и посмотрел.
Как уже сказали ранее, главное сделать различные временные ограничения, дабы сервер в итоге на заддосили, например, передачей по одному доллару с помощью бинда команды на кнопку (думаю, если человек 10 начнут так флудить, сервера надолго не хватит).
Например то, что кол-во потоков в плагине ограничено и большое число запросов всё равно добьёт сервер?
Вот, например
http://i.imgur.com/MZuTiDY.png
И даже если представить, что формирование ответа у MySQL занимает половину всего времени (меньше половины секунды), при подобном "ддосе" могут начаться лаги как минимум из-за того, что игрок будет флудить командой и сервер будет обращаться к плагину.
Хотя право твоё. Но я всё же не стал бы издеваться над БД
Выше написали верно. Я зарегистрировал аккаунт, было 150$, потратил их, стало 130 и сразу пошёл в Личный Кабинет, и там тоже 130. А данные в ЛК берутся то из базы..
- - - Добавлено - - -
Что значит временные ограничения? Что то типа анти флуда в игре на 1-2 секунды?
Только при дисконекте...
Ну да. В команды, которые напрямую обновляют данные аккаунта (та же передача денег) добавить что-то типа
И всё. Только это самый банальный примерPHP код:
if(gettime() < command_flood[playerid]) return SendClientMessage(playerid, -1, "Подождите 3 секунды");
//Код команды
command_flood[playerid] = gettime()+3;
return 1;
Эхх раз continue решил не отвечать (не знаю, поверил ли он мне или просто забил), то всё же скажу, что этот тест - это лишь вброс для continue. Тест неверен, ибо тут отображено время от первого запроса и до текущего (то время, что прошло с начала цикла и до текущего момента, если быть точным), а не время обработки одного единственного запроса.
У меня нет идей как реализовать тест, который бы правильно отображал ситуацию, в которой, например, 10 игроков одновременно флудят командой для передачи денег с помощью биндера кнопок. Но уязвимое место - это совсем не БД, а именно сервер, который может залагать чисто из-за того, что его заставляют постоянно обращаться в mysql_query. Но может и проблем не будет никаких, во что мне не особо верится.
P.S. Как я уже многим и говорил: будьте скептиками :) Вот простой вариант того, как кто-то легко может ввести вас в заблуждение. Если бы я не вспомнил про эту тему, многие так бы и восприняли этот тест как какую-то истину и жили бы с ложными знаниями =) Скептицизма много не бывает