Стек запросов обработчика ASP.Net - PullRequest
2 голосов
/ 20 октября 2010

У меня есть немного странное требование, что я не уверен, как правильно сформулировать.

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

Таким образом, по мере поступления запросов они, по существу, составляются в соответствии с некоторым внутренним интервалом времени для каждого клиента.Затем сначала обрабатывается самый верхний (самый последний) запрос стека.

Причина этого заключается в том, что клиенты будут запрашивать ресурсы, когда пользователь взаимодействует с клиентом.Но пользователь заботится только о самом последнем запросе (подумайте, постоянно ли он ищет в потоковом файле - сначала я хочу обработать самые последние запросы, поскольку именно там пользователь захочет начать воспроизведение мультимедиа).

Как мне подойти к этому?Я думал о чем-то вроде синглтона, к которому были отправлены все запросы, и он обрабатывал запросы на стек от каждого клиента, а затем отправлял их для обработки.

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

Обновление : Это может быть возможно, но очень трудно получить надёжность.Я могу получить запросы, которые будут обработаны не по порядку, но они иногда пропускаются или не принимаются клиентом.Я начинаю думать, что, возможно, это функциональность на стороне клиента, а не на стороне сервера.Клиент должен более тщательно управлять запросами.

Например.реализовать монитор / таймер, который отправляет запросы только тогда, когда он определяет, что пользователь, вероятно, будет нуждаться в ресурсе.Это может быть после поиска или если позиция меняется медленно, а не быстро.

1 Ответ

0 голосов
/ 18 февраля 2011

Это интересная теоретическая проблема, поэтому вот как вы можете сделать это очень широкими мазками:

  1. Создание одноэлементного класса, содержащего коллекцию стека LIFO
  2. В начале конвейера запроса добавьте ссылку на поток запроса в очередь.
  3. Пусть поток запроса просматривает коллекцию стека, пока текущий поток не станет следующим в очереди
  4. Извлеките ссылку на поток из стека и завершите оставшийся конвейер запросов.

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

...