Проблема масштабирования PHP, MySQL, Memcache / Ajax - PullRequest
1 голос
/ 16 января 2011

Я строю Ajax Tic Tac Toe игру на PHP / MySQL. Суть игры заключается в том, чтобы иметь возможность поделиться URL-адресом, подобным mygame.com/123, со своими друзьями, и вы играете в несколько игр одновременно.

Способ, которым я его настроил, заключается в том, что файл (reload.php) вызывается каждые 3 секунды, пока пользователь просматривает пространство своей игровой доски. Этот reload.php строит их игровые доски, а вывод (html) заменяет их текущую игровую доску (таким образом, показывая игры, в которых их очередь)

Изначально я построил его полностью на PHP / MySQL и имел нулевое кеширование. Мой друг предложил мне попробовать сделать всю временную / быструю информацию для чтения через memcache (сохранение ходов и совпадений ID), а затем создать игровые доски из этой информации.

Моя проблема заключается в том, что оба решения сталкиваются со стеной, когда работает примерно 30-40 активных пользователей и работает примерно 40-50 игр.

Он работает на VPS от VPS.net с 2 узлами. (Выделенный процессор: 1,2 ГГц, ОЗУ: 752 МБ)

Каждый вызов reload.php выполняет 3 выбора и 2 запроса на вставку. Размер извлекаемых данных незначителен. Те же действия происходят с index.php для создания досок для первого посещения.

Теперь, когда предыстория закончена, мой вопрос:

Будет ли узкое место в том, что каждый пользователь опрашивает один и тот же файл каждые 3 секунды, чтобы восстановить свои игровые поля, и что все пользователи сидят на index.php, из которого в HTML выполняются вызовы AJAX.

Если это так, можно ли распространять обращения пользователей по набору файлов, предназначенных для создания игровых досок (например, reload1.php 2, 3 и т. Д.), И направлять пользователей к соответствующему файлу. Это уменьшит давление?

Длинное многословное объяснение; тем не менее, мне не о чем было спрашивать.

Большое спасибо за понимание.

Ответы [ 2 ]

1 голос
/ 16 января 2011

Используйте сокет-сервер для обмена информацией об активной игре, PHP и MySQL не должны использоваться для поддержки активных игровых сессий.

Примером сокет-сервера с открытым исходным кодом будет red5, если вы не возражаете заплатить немного, я бы порекомендовал Smartfox.

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

0 голосов
/ 16 января 2011

каждая игра получает свой файл. например, 459675.html или .txt или .json или w / e Этот файл может быть html-страницей или любым другим, что вам нужно, чтобы сообщить о текущем состоянии игры.

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

когда клиент делает ход, он отправляет запрос в скрипт. скрипт переписывает файл ... повторить.

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

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