Вот гипотетическая ситуация, о которой я удивлялся в последнее время. Предположим, у меня есть интерактивная страница, созданная в ASP.NET и Ajax, которой я хочу, чтобы несколько пользователей могли манипулировать одновременно. Как лучше всего сохранить состояние этой страницы? Особенно, если страница была относительно эфемерной и не нуждалась в особом хранении в базе данных?
В качестве конкретного примера, предположим, что я реализую базовую игру в шашки. Сервер должен постоянно поддерживать состояние платы. Клиенты должны периодически проверять статус форума и должны иметь возможность передавать свои изменения на форум. Когда все игроки уходят или когда игра заканчивается, доска больше не нужна, и сервер может ею распоряжаться.
Я мог бы хранить все в базе данных, извлекать ее, когда клиенты запрашивают обновление платы, и сохранять ее, когда сервер получает обновление. Но это похоже на дополнительные затраты.
А как насчет статических переменных? Достаточно ли они надежны / достаточно эффективны для этой работы? Есть ли другой механизм хранения, который я мог бы использовать? Или это настолько далеко за пределами того, что ASP.NET может эффективно делать, что я должен смотреть на совершенно другую технологию, если я когда-либо захочу реализовать это?
Обновление:
Одно быстрое обновление, чтобы узнать, смогу ли я получить еще один раунд ответов. После небольшого исследования, вот что у меня есть:
Manu предложил использовать MemCached независимо для хранения данных. Мне нравится, что это решение работает даже в многосерверных средах, но я отметил несколько недостатков:
1) Сайт MemCached заявляет, что он предназначен для приложений с интенсивным чтением (что не относится к традиционным веб-приложениям) и что он «ненадежный». Я не дошел до того, чтобы определить, насколько важны эти характеристики (т. Е. Медленная запись? Есть ли задержка распространения?).
2) В реализации, несколько близкой к моему приложению (хранение данных сеанса), сайт MemCached использует базу данных за кешем, даже если данные не нужно сохранять.
3) У меня есть некоторые опасения по поводу того, как можно использовать MemCached в размещенной среде.
Глядя на статические переменные, они кажутся быстрыми. Они не являются поточно-ориентированными, но это можно объяснить. Однако они локальны для рабочего процесса, поэтому я не уверен, как они работают с балансировкой нагрузки или веб-садом.
Наконец, существует, по крайней мере, одна реализация клиента чата на основе ASP.NET (ОЧЕНЬ похоже на этот пример), который использует базу данных в качестве серверной части. При правильном кэшировании это может быть просто "достаточно хорошо".