2010-09-16 2 views
0

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

Сценарий выглядит следующим образом: Пользователь может видеть, какие другие пользователи находятся в сети, а затем бросить вызов одному из них. Другой пользователь получает вызов и принимает его. Теперь оба пользователя получают по 5 вопросов каждый, и совпадение начинается одновременно для них (почти одновременно). Затем, когда пользователь переходит через вопрос или решает его, состояние обновляется и на другом экране пользователя.

По сути, это очень похоже на чат-систему, такую ​​как чат facebook. Я могу видеть, кто все в сети. Я отправляю чат-сообщение своему другу, который может ответить на него, и этот ответ отображается в моем окне чата.

Я считаю, что все это может быть достигнуто с помощью ajax. Я могу легко сделать ajax-вызовы веб-сервисам .asmx и получить объекты для конкретного пользователя, поскольку сеанс можно получить там. Однако мне интересно, где сохранить состояние, потому что сеанс предназначен для определенного пользователя, и я хочу, чтобы мой конкретный объект был доступен для двух конкретных пользователей.

Где я могу хранить состояние? Или, например, на примере чата, основанного на Ajax, где я должен хранить какое сообщение User1 и когда Uer1 вводится, как он отображается пользователю2?

Я думал об объекте приложения, но, читая его, не рекомендуется.

Что вы рекомендуете для такой вещи?

ответ

1

Если вы пытаетесь передать сообщение «рядом с реальным временем», вы можете захотеть взглянуть на HTTP-опрос (длительный опрос a.k.a.). Я не буду использовать SQL для передачи временных сообщений и кратковременных переходов состояний, как я видел в прошлом. Если запуск на одном веб-сервере просто удерживает состояние в сеансе или в кэше ASP.NET. Если вы работаете на нескольких веб-серверах, посмотрите на распределенные кэши, такие как memcached, Velocity (Win 2008) или NCache. Затем подавайте кэшированные данные в запросы AJAX, которые сидят и ждут (из-за длительного опроса). Ключевой проблемой дизайна является дизайн ключей кеша (каламбур не предназначен), для чего необходимо будет указать идентификатор пользователя для конкретных данных событий.

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

+0

Хорошие баллы. Я удалил свой ответ (так как у вас есть ссылка на него). –

+0

спасибо за эти указатели ... Я буду читать и попробовать их и опубликовать мои результаты здесь скоро. – shashi

+0

Вопрос о сохранении состояния в кеше. Что произойдет, если на сервере закончится нехватка памяти. Будет ли кеш не уничтожать объекты для освобождения памяти, и в этом случае другой входящий запрос может выдать ошибку? Является ли это возможностью и что я могу сделать в этом случае? – shashi

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