Глобальные переменные и сеансы в asp.net

Я новичок в веб-разработке, и из мира java и android у меня есть несколько вопросов. (Я использую asp.net).

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

Counter_ID Increment_Value

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

Instance_ID Counter_ID Counter_Value Status(Active/Complete) Time_Remaining

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


person Alk    schedule 17.08.2015    source источник
comment
как вы решаете проблемы с устаревшими данными? Итак, что происходит, когда со значениями БД происходит что-то, о чем клиентская сторона должна знать, но не знает?   -  person Drew    schedule 18.08.2015
comment
Это именно то, что я хочу знать... Я привык обрабатывать всю обработку данных в программе и просто использовать сервер для извлечения данных каждый раз, когда мне нужно, поэтому концепция выполнения этого на сервере немного меня смущает   -  person Alk    schedule 18.08.2015
comment
так что нарисуйте его мелом, если вам нужно, и подумайте: есть ajax, есть угловой, обязательный, много способов ободрать кота. Некоторые из этих вещей связаны с браузером. тоже конкретный.   -  person Drew    schedule 18.08.2015
comment
добавил несколько других тегов, чтобы привлечь другую аудиторию   -  person Drew    schedule 18.08.2015
comment
Спасибо, я посмотрю то, что вы упомянули   -  person Alk    schedule 18.08.2015


Ответы (1)


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

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

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

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

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

person spoida    schedule 18.08.2015