какой из них использовать службы Windows или многопоточность - PullRequest
0 голосов
/ 26 июля 2010

У нас есть сборка веб-приложения с использованием asp.net 3.5 и SQL-сервера в качестве базы данных, которая достаточно велика и используется около 300 суперпользователями для управления около 5000 сотрудников.Теперь мы внедряем в приложение функцию SMS, а это значит, что пользователи смогут отправлять и получать SMS.Каждые две минуты SMS-сервер третьей стороны проверяется на наличие новых сообщений.Также SMS удерживаются в очереди и отправляются каждый интервал времени от 15 до 30 минут.

Я хочу, чтобы этот процесс проверки и отправки выполнялся в фоновом режиме приложения все время, даже если пользователь закрывает окно браузера,Мне нужен совет, как мне это сделать?

Достигнет ли это использование потока, или мне нужно будет создать для него службу Windows, или есть другие варианты?


Дополнительная информация:

Я хочу выполнить задачу в таймере, что произойдет, если я закрою окно браузера, задача не будет выполнена, не так ли?

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

Как запустить эту задачу, если закрытьокно браузера?

Я пытался просмотреть службу Windows, но как передать ей общий набор данных для обработки.

Ответы [ 2 ]

0 голосов
/ 28 июля 2010

На самом деле нет потока или выбора службы, служба может (и обычно есть!) Многопоточна, поток может запустить службу.

Существует три основных варианта, которые вы можете: -

Каким-то образом запустить другой поток, работающий, когда пользователь входит в систему - это, вероятно, очень плохой выбор для того, что вы хотите, так как вы не можете реально продолжать его работать после того, как сеанс пользователя потерян.Служба Windows, которая запускается при запуске ОС и продолжается до тех пор, пока сервер не завершит работу.Вы можете сделать это зависимым от службы SQLserver, чтобы она запускалась после того, как БД стала доступна.Это «лучшее» решение, но оно может быть излишним для ваших целей.Кроме того, вам нужно знать API сервисов, чтобы написать его правильно, так как вам нужно правильно реагировать на запросы выключения и состояния.

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

0 голосов
/ 26 июля 2010

Различают то, что делает браузер, и то, что происходит на стороне сервера.

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

Вы хотите, чтобы процессор демона, который обращается к сторонним SMS, запускался по времени, а не по функции браузера. Любое из ваших предложений будет работать:

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

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

Так что я бы выбрал между автономным демоном и фоновым потоком вот так:

  1. Что проще реализовать? Я разработчик Java EE, я знаю, что на моем сервере приложений у меня есть API для определения кода, который должен быть запущен в соответствии с таймером, API решает проблемы с многопоточностью. Так что для меня это очень просто. Я не знаю, что у вас есть в наличии. Таймеры не так тривиальны, как могут показаться - поэтому наличие надежного API полезно. Если бы это было более сложное требование, когда код демона был грубым и мог мешать коду WebApp, то я мог бы предпочесть оставить его явно отдельным.
  2. Что проще для развертывания и администрирования? Разверните отдельное веб-приложение и демон или разверните одну вещь. В мире Java EE у нас может быть одно корпоративное приложение со всем кодом, так что это единственное, что нужно развернуть, запустить и контролировать.

Еще одна вещь, которую следует учитывать: масштабирование и устойчивость. Вы можете выбрать запуск нескольких копий своего веб-приложения либо для обеспечения возможности переключения при отказе, либо просто потому, что вам нужна дополнительная мощность. В каком случае, сколько у вас будет демонов? Будет ли проблемой запустить два демона? Возможно, вам понадобится дополнительный код для связи между двумя демонами, например, войдите в базу данных во время последней работы, каждый демон может сказать: «О, мой приятель уже выполнил работу 10:30, я пойду спать»

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