2011-01-16 1 views
1

Я создаю игру ajax tic tac toe в PHP/MySQL. Предпосылка игры заключается в том, чтобы иметь возможность делиться URL-адресом, похожим на mygame.com/123, с друзьями, и вы играете в несколько одновременных игр.PHP, MySQL, проблема масштабирования Memcache/Ajax

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

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

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

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

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

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

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

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

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

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

+0

Почему это хранится в базе данных? Почему бы просто не использовать memcached? –

ответ

1

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

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

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

+0

Значит, вы говорите, что они не вокруг стены, за пределами перехода к совершенно другому решению? –

+0

Вы всегда будете сталкиваться с «стеной» независимо от того, с каким решением вы идете, вот когда вы начинаете масштабирование. Возможно, вы могли бы сделать некоторые улучшения для повышения производительности серверов приложений, но на основании того, что вы дали, я не могу дать вам рекомендации по этому поводу. Точка, с вашей текущей настройкой, вы работаете в вашей «стене» WAY быстрее, чем с сервером сокета. – Naatan

+0

Решение Джеффа все равно будет нуждаться в некоторой настойчивости. Поэтому изначально он все равно загружал игры, но затем передал их, как @Naatan предложил использовать настройку сервера сокетов - хороший учебник на серверах сокетов: [http://devzone.zend.com/article/1086]. –

-1

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

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

Когда клиент совершает переход, он отправляет запрос сценарию. скрипт перезаписывает файл ... repeat.

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

Смежные вопросы