2015-10-14 137 views
0

我有一個web應用程序,它運行在Windows 2008服務器機器上的IIS中的CakePHP框架上的PHP中。現在在節點和PHP之間使用Redis與會話共享

,這個應用程序是輪詢每個連接的用戶每6秒刷新屏幕的一部分,這是導致請求到IIS服務器的趨向,並拖慢整個系統時,Oracle數據庫忙。

在試圖解決這個問題,我想了解如何使用Node.js來解決這個問題,並使用推送通知。這種方式每6秒鐘一次,Node會將通知推送給所有活動的瀏覽器客戶端

我面臨的問題是,我正在撥打的電話正在使用登錄用戶會話。 (調用數據庫,一旦我得到數據,更新會話)。

我讀過Redis可以成爲一個解決方案,我已經看到posts explaining how to share the session。但有件事情我不明白尚未:

我怎麼能登錄用戶的會話? 我應該迭代所有活動會話嗎?

我想在節點創建setInterval來查詢數據庫爲每個登錄的用戶。

+0

爲什麼沒有你的PHP和瀏覽器通過網絡套接字談話,並有PHP推送數據到客戶端,而不是客戶端做池?我不熟悉PHP的抱歉,但在節點中,我們使用網絡套接字,它很容易。我的意思是...那是什麼websockets有。我猜測PHP應該也支持web套接字。這樣,您可以將您的後端合併。 – sagie

+0

@sagie在PHP中沒有什麼像'setInterval'。 PHP僅在用戶發出請求時運行。否則,你需要一個cron或計劃任務,當然,這也不會訪問會話。 (並在窗口中的最短時間爲5分鐘) – Alvaro

+0

確定了你,所以你可能不得不看看php如何將會話存儲在redis中,並擴展Express Redis會話存儲以讀取該格式。問題是許多中間件喜歡在會話上寫東西,所以你的擴展redis會話存儲將不得不處理這個問題。 – sagie

回答

0

我可以理解你的問題我實施了一種類似的網絡聊天結構。使用redis或memcache,您可以創建自己的數據結構來保存用戶會話,並將其加載到ram中,速度非常快,並且它將像全局會話一樣可用於所有用戶會話以及來自瀏覽器的任何節點或ajax請求redis並將響應返回給用戶,而不是向Oracle數據庫發送請求,而不是向用戶發回請求。

+0

你能指出某處使用的一些例子嗎?找不到太多。 – Alvaro