Создание общего рабочего пространства с ASP.NET и Ajax - PullRequest
3 голосов
/ 07 октября 2008

Вот гипотетическая ситуация, о которой я удивлялся в последнее время. Предположим, у меня есть интерактивная страница, созданная в ASP.NET и Ajax, которой я хочу, чтобы несколько пользователей могли манипулировать одновременно. Как лучше всего сохранить состояние этой страницы? Особенно, если страница была относительно эфемерной и не нуждалась в особом хранении в базе данных?

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

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

А как насчет статических переменных? Достаточно ли они надежны / достаточно эффективны для этой работы? Есть ли другой механизм хранения, который я мог бы использовать? Или это настолько далеко за пределами того, что ASP.NET может эффективно делать, что я должен смотреть на совершенно другую технологию, если я когда-либо захочу реализовать это?

Обновление:
Одно быстрое обновление, чтобы узнать, смогу ли я получить еще один раунд ответов. После небольшого исследования, вот что у меня есть:
Manu предложил использовать MemCached независимо для хранения данных. Мне нравится, что это решение работает даже в многосерверных средах, но я отметил несколько недостатков:
1) Сайт MemCached заявляет, что он предназначен для приложений с интенсивным чтением (что не относится к традиционным веб-приложениям) и что он «ненадежный». Я не дошел до того, чтобы определить, насколько важны эти характеристики (т. Е. Медленная запись? Есть ли задержка распространения?).
2) В реализации, несколько близкой к моему приложению (хранение данных сеанса), сайт MemCached использует базу данных за кешем, даже если данные не нужно сохранять.
3) У меня есть некоторые опасения по поводу того, как можно использовать MemCached в размещенной среде.

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

Наконец, существует, по крайней мере, одна реализация клиента чата на основе ASP.NET (ОЧЕНЬ похоже на этот пример), который использует базу данных в качестве серверной части. При правильном кэшировании это может быть просто "достаточно хорошо".

Ответы [ 2 ]

1 голос
/ 07 октября 2008

попробуйте memcached: http://www.danga.com/memcached/

1 голос
/ 07 октября 2008

Это во многом зависит от использования этой гипотетической системы. При разумной частоте обновления (возможно, 5 с?) И надлежащим образом оптимизированной базе данных, надлежащих ключах и т. Д. Это не должно создавать чрезмерную нагрузку на ваш сервер, особенно если вы делаете это с помощью вызовов в стиле JSON-RPC с дифференциальными обновлениями (только дают меняются, так как х раз), а не полное обновление платы.

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

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