Счетчик просмотров в ASP.NET MVC - PullRequest
2 голосов
/ 28 августа 2010

Я собираюсь создать счетчик просмотров для статей. У меня есть несколько вопросов:

  1. Стоит ли игнорировать автора статьи? когда он открывает статью?

  2. Я не хочу обновлять базу данных каждый время. Я могу хранить в Dictionary<int, int> (articleId, viewCount) сколько раз каждая статья была просмотрена. После 100 Хиты, я могу обновить базу данных.

  3. Я должен считать удар только один раз за час для каждого пользователя и статьи. (если пользователь открывает одну статью много раз в течение одного часа количество просмотров должен быть увеличен только один раз).

Для каждого вопроса я хочу знать ваши предложения, как это сделать правильно.

Мне особенно интересно, как это сделать # 3. Должен ли я хранить время, когда пользователь открыл статью в куки? Означает ли это, что я должен создать новый файл cookie для каждой страницы?

Ответы [ 3 ]

3 голосов
/ 28 августа 2010

Я думаю, что знаю ответ - они анализируют журнал IIS, как предложил Ope.

Скрытое изображение src установлено на

http://stackoverflow.com/posts/3590653/ivc/[Random code]

[Случайный код] необходим, потому что многие людиможет использовать один и тот же IP-адрес (например, в сети), а код используется для различения пользователей.

2 голосов
/ 28 августа 2010
  1. Конечно - я думаю, что это хорошая идея

  2. и 3. связаны: проблема в том, где вы на самом деле храните этот словарь и логику.

Приложение ASP.NET или область сеанса, конечно, самый простой выбор, но здесь вам действительно необходимо понять логику пулов приложений.Приложения ASP.NET время от времени перезагружаются: когда на сайте в течение определенного периода не выполняется никаких действий или в особых ситуациях - например, если процесс начинает занимать слишком много памяти, приложение закрывается и запускается новоеследующий запрос.Существуют события для закрытия сеанса и приложения, но, по крайней мере, несколько лет назад они не были действительно надежными: во многих особых случаях они не всегда срабатывали.Возможно, сейчас они лучше, но это больно проверять.А 1 час - это действительно много времени: обычно сеансы поддерживаются только через 20 минут после последнего запроса.

Надежным способом было бы иметь отдельную службу Windows (много работы для программирования) или всегда хранитьк базе данных с двойным анализом (довольно много накладных расходов для такой маленькой функции).

Есть ли у вас доступ к журналам IIS?Как насчет анализа журналов IIS, например, каждые 30 минут с помощью какого-то процесса таймера и отсчета?Или же просто сохраните все совпадения в базе данных с информацией о пользователе и рассчитайте уникальные совпадения с помощью аналогичного времени.

Последний вопрос: действительно ли вы уверены, что ни одно из тысяч встречных приложений / служб в Интернетене сделаете работу достаточно близко к вашим требованиям?

Удачи!

1 голос
/ 28 августа 2010

Это скриншот этой страницы в Firebug.Вы можете видеть, что существует запрос, который возвращает код состояния 204. (Нет содержимого).

Это счетчик просмотров stackoverflow.Они используют скрытое изображение, которое указывает на действие контроллера.

У меня много статей.Как отследить, какие статьи пользователь уже посетил?

PS Кстати, почему этот запрос сделан два раза?

alt text

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