2010-02-09 3 views
0

У меня есть многопользовательская карточная игра (до 4 игроков может играть один и тот же экземпляр игры) на facebook. Игра небольшая и размещается на одном сервере. Теперь я изучаю масштабируемость, поскольку я надеюсь, что скоро одного сервера будет недостаточно.Azure: советы по созданию простой многопользовательской карточной игры, масштабируемой

сервер хранит в памяти список всех игр, которые ведутся: List<Game>

Когда клиент делает запрос (например, бросает карты) он отправляет сообщение на сервер. Теперь вот сложная часть. Сервер не отправляет ответ немедленно, а проверяет, изменил ли какой-либо другой игрок состояние игры до того, как он ответит. Этот подход работает очень хорошо, потому что клиент (silverlight) не постоянно проводит опрос сервера.

Какой подход вы бы порекомендовали в Azure? Мой главный приоритет - быстро реагировать на клиентов и избегать постоянного опроса клиентов.

С моим ограниченного знанием Azure я имею в виду с этой дорогой:

магазин игры в лазурном хранении таблицы, а не в памяти.

Это будет сделано в WebRole: псевдокод:

void Page_LoadOfAnAspxPage 
{ 
// deserialze the message from the posted information 
Message msgClient = ...; 

// retrieve game from table storage 
Game g = RetrieveFromTableStorage(gameGuid); 

// post message to game 
g.ProcessClientMessage(msgClient); 

// save back to table storage so other game clients can be aware of new state 
SaveToTableStorage(gameGuid, g); 

// now wait until another client modifies the game 
while(true) // will I be incurring hosting charges (transactions for what is going on in this while loop)??? 
{ 
    // grab game from table storage 
    g = RetrieveFromTableStorage(gameGuid); 

    // has something changed? 
    MsgResponse response = g.ProcessClientMessage(msgClient); 
    if (response.ActionName != ActionName.GameHasNotChanged) 
    { 
    // some other client changed the game. 
    // give this response back to our client 
    break; 
    } 
    // sleep a little and check again... 
    Sleep(xx); 
} 
} 

Верите ли вы этот подход будет работать? Какие препятствия я мог бы натолкнуться? Я был бы очень благодарен за любые предложения/улучшения.

Спасибо!

сантьяго

ответ

0

Посмотрите на возможности Silverlight Duplex. Это распределит нагрузку/вычислительную мощность на клиентов silverlight, а не на сервере, без необходимости управлять вашим собственным механизмом опроса.

Вы можете разместить логику в WebRole в виде службы WCF

http://silverlightforbusiness.net/2009/06/23/pushing-data-from-the-server-to-silverlight-3-using-a-duplex-wcf-service/

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