2015-08-17 7 views
0

Я новичок в веб-разработке, и я пришел из мира Java и Android. У меня есть несколько вопросов. (Я использую asp.net).Глобальные переменные и сессии в asp.net

  1. Предположим, у меня есть простая веб-страница с меткой, показывающей число и кнопку. Когда любой пользователь нажимает кнопку, число автоматически увеличивается для всех пользователей, просматривающих сайт, даже если они не обновляют страницу. Могу ли я использовать сеансы для достижения этой или другой концепции, которую я должен изучить?
  2. У меня есть два типа счетчиков, которые хранятся в таблице mysql со следующей схемой.

Counter_IDIncrement_Value

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

Instance_IDCounter_IDCounter_ValueStatus(Active/Complete)Time_Remaining

Когда пользователь открывает страницу, посвященную одному из двух типов счетчиков, информация о текущем запущенном экземпляре этого счетчика должна быть загружена. Я бы просто выполнил SQL-запрос для достижения этого и прочитал информацию для активных счетчиков каждый раз, когда загружается страница счетчика, или есть способ, которым я могу хранить эту информацию на сайте, чтобы сайт «знал», какой экземпляр в настоящее время активен и не требует SQL-запроса для каждого запроса (с использованием концепции глобальной переменной)? Очевидно, что описанные выше ситуации являются просто упрощенными примерами, которые я использую для объяснения моей проблемы.

+0

Как вы справляетесь со старыми проблемами с данными? Итак, что происходит, когда что-то происходит с значениями DB, которые должна знать клиентская сторона, но нет? – Drew

+0

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

+0

, так что вытащите его карандашом, если вам нужно и подумайте:> Есть ajax, есть угловые, переплетные, многие способы кошки кошки. Некоторые из этих [вещей] (https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events) также специфичны для браузера. – Drew

ответ

1

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

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

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

Для вашего второго примера, используя транзакционную базу данных ApplicationState и транзакционную БД, вы должны иметь возможность кэшировать, какой счетчик активен в настоящий момент, и включать их во время при условии, что вы заблокируете все свои ресурсы во время выполнения переключателя между ними.

Надеюсь, этого достаточно, чтобы вы попали в правильном направлении.

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