2013-09-16 6 views
1

Я знаю, что по умолчанию объем сервиса в Grails является singleton. Это означает, что один экземпляр создается и передается. Когда речь идет о многих пользователях, таких как Facebook или Twitter, должна ли область быть сеансом или чем-то еще? Я ценю некоторые объяснения. Я разрабатываю сайт социальной сети с Grails, мне интересно, для чего нужно установить область. Я знаю, что одним из способов выяснить, является ли использование одного экземпляра проблемой, но опять-таки я об этом не знаю.Grails scope as Singleton, Многие пользователи входят в систему и выполняют операции

ответ

2

Наличие единственного объема услуг в Grails - это проблема только в том случае, если вы выполняете функцию stateful, что означает, что вы объявляете переменные экземпляра и сохраняете вещи, связанные с определенными запросами в них, и в этом случае эти переменные экземпляра доступны для всех запросов, которые используют эту услугу. Соответствующее место для хранения пользовательских данных на сервере находится в сеансе HTTP, а не в переменных экземпляра в контроллерах или службах.

+0

Как насчет службы загрузки файлов? Может ли это быть singleton, пока многие пользователи одновременно получают доступ к ним для загрузки изображений? В нем есть методы, но нет переменной. Мне было интересно, вызывает ли один пользователь метод загрузки службы fileUpload от своего контроллера, а еще 3 пользователя делают то же самое в одно и то же время, это забивает загрузку файла, так как метод вызывается одновременно. Не могли бы вы объяснить, правильно ли это? – AlexCon

+0

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

+0

Спасибо, Нейт, вот вопрос, который я опубликовал несколько минут назад, не могли бы вы посмотреть на него? Ценить это. http://stackoverflow.com/questions/21285634/uploading-photos-using-grails-services – AlexCon

1

Сохранение специфических для каждого пользователя данных в сеансе, работающих в сеансе, будет работать и распространено в небольших веб-приложениях. Это более или менее эквивалентно хранению данных непосредственно в сеансе HTTP, но экономит вам от необходимости напрямую обращаться к объекту сеанса.

Однако услуги с поддержкой состояния обычно не нравятся для больших приложений. Возможно, вам придется повторно использовать вашу службу в контекстах без сеанса, например. как API. Кроме того, в зависимости от типа данных, сеанс может быть не лучшим выбором; файлы cookie на стороне клиента, сохраняемые объекты домена или хранилище имен/значений, таких как memcached, могут иметь больше смысла. Это зависит от масштаба приложения и типа данных, которые вы храните, и может измениться в течение срока действия вашего приложения. Построение государства в вашу службу затрудняет изменение вашей стратегии.

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

  • Нет связанных вопросов^_^