2015-10-14 140 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