Модели с постоянным состоянием между HTTP-запросами - PullRequest
3 голосов
/ 20 февраля 2011

Я хочу создать веб-приложение с моделью, которая сохраняется между HTTP-запросами. Из того, что я понимаю, такие языки, как PHP, рассматривают каждый HTTP-запрос как совершенно новое соединение, за исключением некоторых глобальных переменных, таких как SESSION; поэтому каждый раз, когда пользователь меняет страницы, все мои PHP-классы снова загружаются в память (и каждый AJAX-запрос делает это тоже), что требует от меня сборки из базы данных каждый раз.

Я ошибаюсь или я пытаюсь сделать круг вписывающимся в квадрат? Memcached, кажется, является хорошим решением для сохранения моей модели в памяти между запросами страниц, но ему все равно нужно загрузить кеш. PHP CLI выглядел многообещающе, но, посмотрев на него больше, казалось, что это будет больше проблем, чем оно того стоило. Есть предложения?

Ответы [ 2 ]

4 голосов
/ 20 февраля 2011

Вы должны избегать необходимости постоянного состояния в вашем веб-приложении;HTTP не имеет состояния, и вам необходимо разработать свою бизнес-логику вокруг этого.Кроме того, PHP не очень безопасен для утечки памяти, так как он не предназначен для того, чтобы действовать как демон или работать в течение продолжительных периодов времени.Вы не должны поддерживать базу данных информации в переменных PHP либо.Вы можете кэшировать дорогостоящие результаты запросов в memcache и извлекать их с очень небольшой задержкой.

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

1 голос
/ 29 марта 2013

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

Для php можно использовать IPC через расширение php_shmop.

Для nodejs я нашел это

...