|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.04.2011, 14:56 | #1 |
Регистрация: 16.04.2011
Сообщений: 5
|
Алгоритмы создания браузерных онлайн-игр
Здравствуйте.
Я занимаюсь программированием уже несколько лет. Дошло дело до довольно нагруженных систем, как, например, онлайн-игра. Остро возник вопрос нехватки знаний в области программирования с учетом нагрузки на сервер. Имеется: Программирование на PHP5. Хранение данных MySQL. Понятно, что необходимо оптимизировать систему, поэтому появились несколько вопросов: 1. Информация хранится в БД. Как реализовывать это хранение и выборку, чтобы не упереться в гигантское количество обращений в секунду и подвисанию сервера БД. Например, идет бой персонажа, соответственно каждый удар должен быть записан в БД, чтобы можно было увидеть лог боя. Этих боев одновременно с онлайном, допустим, 10к человек будет огромное количество в единицу времени, поэтому БД может не выдержать столько записей и запросов одновременно. Как правильно реализовать эту работу с БД? Каждую команду пользователя или результат обработки команды писать в БД или можно как-то по другому реализовать это? 2. Структура всех сущностей должна быть создана каждый раз при обращению к серверу или лучше сделать разные "программы" для разных операций, таких как "чат", "бой", "миниигра", "квест" и т.д. или лучше обрабатывать одним кодом в модуле ядра? Вопрос в том, как разделить алгоритмы системы, чтобы загружались только нужные ветви, но и чтобы снизить количество обращений к серверу? 3. Как реализовывается обмен данными между браузером и движком? Имеется ввиду: как правильно реализовать запросы - ответы, чтобы нагрузка на сервер и на БД оказалась минимальной (не имеются ввиду оптимизация кода и запросов), как например, может быть необходимо некоторые данные хранить во временных таблицах или отдельно для каждого боя создавать свою таблицу, а потом составлять лог и копировать его в архив логов? Буду очень признателен за исчерпывающие ответы или ссылки на статьи о построении подобных систем. Последний раз редактировалось Preyar; 16.04.2011 в 14:59. |
16.04.2011, 15:30 | #2 | |||||||
Старожил
Регистрация: 19.04.2010
Сообщений: 2,702
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
|||||||
16.04.2011, 19:25 | #3 | |||||||
Регистрация: 16.04.2011
Сообщений: 5
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Насчет одним файлом - это хорошая мысль, но ядро должно в таком случае загружать необходимые классы в полном объеме, а я в вопросе имел ввиду, может будет менее нагружено, если работать с БД напрямую, минуя абстракцию и инкапсуляцию? или все же это будет не правильно? Цитата:
Цитата:
Основной вопрос и заключается в том, как реализовать механизм хранения и извлечения информации (что, куда)? Буду очень признателен за ответ. |
|||||||
16.04.2011, 19:29 | #4 |
Регистрация: 16.04.2011
Сообщений: 5
|
Виталий, если вы хорошо разбираетесь в таких системах и в методах хранения информации в БД, то не могли бы вы оставить мне ваш Skype? Я был бы хотел, если вы, конечно, не против, встретиться в Волгограде и получить небольшую консультацию по этим вопросам.
|
16.04.2011, 20:18 | #5 | |||||||||
Старожил
Регистрация: 19.04.2010
Сообщений: 2,702
|
Цитата:
- Разработки концепции (30% от всей работы) , - Программирования (20%), - Создание контента, т.е. рисования и пр. (40%), - Тестирование и исправление багов (10%). К тому же без художественного оформления игру нельзя ни продать, не привлечь на это дело инвестиции. Стоимость художественных работ для средней игры порядка 100К рублей. Ну, так рисовать умеете? Или как собираетесь решать данную проблему? Цитата:
Обычно по достижении нагрузки 100-150 запросов производят зеркалирование игры, т.е. разбиение на несколько серверов. Крупные игры крутятся на десятках серверов. К тому же, чтобы набрать 10000 пользователей нужна рекламная компания 200-300К рублей. Цитата:
К тому же, Вы что думаете их проверять? Цитата:
Цитата:
Нужен один файл, который бы распределял запросы и подключал необходимые модули по потребности. БД использовать только по необходимости. Цитата:
Цитата:
То, что не ценно и быстро меняется, в Memory: он-лайн пользователи и буффер. То, что редко меняется, в MyISAM: таблицы пользователей, характеристик и прочих игровых параметров. Таблицы, которые не меняются, к тому же загоняем в кэш. Сложные объёмные данные пихаем в файлы: логи, интерфейс, чат. Цитата:
Цитата:
Вопросы Вы можете свободно задать здесь. Или у Вас есть другие предложения? |
|||||||||
16.04.2011, 20:47 | #6 | ||||||||
Регистрация: 16.04.2011
Сообщений: 5
|
Цитата:
Цитата:
Насчет рекламной кАмпании повторюсь, не надо считать деньги, тема не для этого. Цитата:
Второй камень - эти логи потом не выбрать и сложно отсортировать такие объемы. И да. Логи для того и нужны, чтобы их можно было проверить. Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Спасибо, что ответили на мои вопросы. Если будут еще - спрошу. Последний раз редактировалось Preyar; 16.04.2011 в 20:52. |
||||||||
16.04.2011, 21:29 | #7 | ||||||||||
Старожил
Регистрация: 19.04.2010
Сообщений: 2,702
|
Цитата:
Цитата:
Цитата:
Про художника и про деньги Я говорю, что бы Вы реально представляли какие трудности Вас ожидают в этом нелёгком деле. Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
||||||||||
17.04.2011, 03:19 | #8 |
Регистрация: 16.04.2011
Сообщений: 5
|
Не буду цитировать. так отвечу по пунктам.
1. Ну почему вы решили, что кто-то что-то делает вперед и неправильно? Поверьте, я все делаю правильно и как надо. 2. Если вас все же это так интересует, то есть 2 программиста помимо меня, художник, иллюстратор, дизайнер, 2 верстальщика, копирайтер, переводчик на 3 языка и 12 человек для тестирования проекта и 2 инвестора. Повторюсь, я не на коленке делаю, я просто интересуюсь, какие могут быть еще методы реализации таких систем, помимо тех, что описал я и наши программисты вместе с руководителем проектов в нашем ТЗ, вдруг что упустили, чтобы не наступать на чужие грабли, решил поинтересоваться. 3. О подключении к БД. Допустим, после обработки команды, надо сохранить 75 разных значений в разные структуры данных. При использовании БД я 1 (!) раз подключаюсь к ней и быстро-быстро сохраняю и делаю выборку. При использовании файлов я 75 файлов открываю, делаю 75 записей на диск, 75 файлов закрываю. Даже без тестов ясно, что БД будет быстрее. 4. Про логи. Еще раз повторю, что логгирование систем нужно ТОЛЬКО для того, чтобы их можно было просмотреть. Иначе теряется вообще смысл делать логи. 5. Относиться к 1 игроку будет ВСЕ и ВСЕГДА, ну кроме технической инфы, которую надо хранить все равно в БД. 1 сессия - 1 человек. по другому быть не может. 6. Изменения игрового процесса - это реакция системы на действия большого количества пользователей в малый промежуток времени. 7. Технологию асинхронных запросов я знаю достаточно, чтобы говорить о том, что делая 10 запросов для загрузки 10 блоков, потребуется 10 http запросов. Если же делать 1 AJAX запрос, то вообще в нем смысла не вижу, т.к. количество запросов по сравнению с обычной передачей данных увеличивается в 2 раза (1-й раз - выгрузка страницы, 2-й раз - передача XML в асинхронном виде), вместо 1 раза (выгрузка уже готовой страницы). 8. Использование AJAX увеличивает количество запросов к серверу, что очень сильно сказывается на скорости загрузки (см. пункт выше). Именно поэтому, чем меньше отдельных файлов загружать на сайт, тем быстрее и менее трудозатратным будет проект. Последний раз редактировалось Preyar; 17.04.2011 в 03:35. |
17.04.2011, 09:16 | #9 | ||||||||
Старожил
Регистрация: 19.04.2010
Сообщений: 2,702
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Инициализировалась игра - часть необходимых данных считалась и записалась в сессию. Дальнейшее получение этих данных идёт из сессии. Цитата:
Цитата:
Цитата:
Один запрос для загрузки 10 блоков. Если хотите сделать всё без AJAX, то делайте интересно будет на это "чудо" посмотреть. |
||||||||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
создание онлайн игр | Licherman | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 3 | 23.10.2010 16:24 |
разработка онлайн-игр | dvizzz | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 1 | 18.06.2010 23:52 |
Стандартные алгоритмы программирования игр. | VintProg | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 0 | 07.11.2009 13:36 |
Баги онлайн игр | 4erw | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 2 | 10.04.2009 07:58 |