2015-10-14 2 views
0

У меня есть веб-приложение, работающее в PHP поверх фреймворка CakePHP в IIS на сервере Windows 2008.Совместное использование сеансов с Redis между узлом и PHP

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

В попытке решить эту проблему я подумываю об использовании Node.js для решения этой проблемы и использования push-уведомлений. Таким образом, каждые 6 секунд узел будет вызывать уведомления обо всех активных клиентах браузера.

Проблема, с которой я сталкиваюсь, заключается в том, что вызов, который я делаю, использует зарегистрированный пользователь сеанс. (для вызова БД, и как только я получу данные, чтобы обновить сеанс).

Я читал Redis может быть решением для этого, и я видел posts explaining how to share the session. Но кое-что еще не получается:

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

Я хочу создать setInterval в узле для запроса БД для каждого зарегистрированного пользователя.

+0

Почему бы вам не поговорить с php и браузером через веб-сокеты и не заставить php нажимать данные клиентам вместо того, чтобы клиенты делали пул? Я не знаком с php извините, но в узле мы используем веб-сокеты и его довольно легко. Я имею в виду ... для чего нужны веб-узлы. и я предполагаю, что php также должен поддерживать сетевые сокеты. Таким образом, вы можете оставить свой backend консолидированным. – sagie

+0

@sagie нет ничего подобного 'setInterval' в PHP. PHP запускается только тогда, когда пользователь делает запрос. В противном случае вам понадобится задача cron или schedule, которая, конечно же, также не будет иметь доступа к сеансам. (а в окнах минимальное время для стрельбы - 5 минут) – Alvaro

+0

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

ответ

0

Я могу понять, что вы выпустили, я реализовал аналогичную структуру для веб-чата. С redis или memcache вы можете создать свою собственную структуру данных для хранения сессии пользователей, она будет загружена в ram, очень быстро, и она будет работать, как глобальный сеанс, будет доступен для всех сеансов пользователей и для любого запроса узла или ajax из браузера, к которому вы будете обращаться redis и вернуть ответ пользователю, а не отправлять запрос в базу данных Oracle, а не обратно пользователю.

+0

Можете ли вы указать пример использования? Не могу найти много об этом. – Alvaro

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