在节点和PHP之间使用Redis共享会话

在节点和PHP之间使用Redis共享会话,php,node.js,session,express,redis,Php,Node.js,Session,Express,Redis,我有一个web应用程序在Windows 2008服务器机器上的IIS中通过CakePHP框架在PHP中运行 现在,该应用程序每6秒对每个连接的用户进行一次轮询,以刷新部分屏幕,这会导致向IIS服务器发出大量请求,并在Oracle数据库繁忙时降低整个系统的速度 为了解决这个问题,我考虑使用Node.js来解决这个问题,并使用推送通知。这样,每6秒节点就会将通知推送到所有活动的浏览器客户端 我面临的问题是,我正在拨打的电话正在使用已登录的用户会话。(调用数据库,并在获得数据后更新会话) 我已经读过可

我有一个web应用程序在Windows 2008服务器机器上的IIS中通过CakePHP框架在PHP中运行

现在,该应用程序每6秒对每个连接的用户进行一次轮询,以刷新部分屏幕,这会导致向IIS服务器发出大量请求,并在Oracle数据库繁忙时降低整个系统的速度

为了解决这个问题,我考虑使用Node.js来解决这个问题,并使用推送通知。这样,每6秒节点就会将通知推送到所有活动的浏览器客户端

我面临的问题是,我正在拨打的电话正在使用已登录的用户会话。(调用数据库,并在获得数据后更新会话)

我已经读过可以解决这个问题的书,我也看到了。但有件事我还不明白:

我怎样才能拥有已登录用户的会话? 我应该迭代所有活动会话吗


我想在节点中创建一个
setInterval
来查询每个登录用户的数据库。

我可以理解您的问题,我为网络聊天实现了类似的结构。使用redis或memcache,您可以创建自己的数据结构,以保存将加载到ram中的用户会话,速度非常快,就像所有用户都可以访问全局会话一样,对于来自浏览器的任何节点或ajax请求,您都可以访问redis并将响应返回给用户,而不是将请求发送到Oracle数据库,而不是返回给用户。

为什么不让您的php和浏览器通过web套接字进行对话,让php推送响应将数据传输到客户端,而不是执行池的客户端?对不起,我不熟悉php,但在node中我们使用web套接字,这非常简单。我是说。。。这就是WebSocket的用途。我猜php也应该支持web套接字。这样,您就可以让后端保持统一。@sagie在PHP中没有什么比
setInterval
更棒的了。PHP仅在用户发出请求时运行。否则,您将需要一个cron或预定任务,当然,它们也无权访问会话。(在windows中,启动它的最短时间是5分钟)明白了,所以您可能需要查看php如何在redis中存储会话,并扩展express redis会话存储以读取该格式。问题是,许多中间件喜欢在会话上写东西,因此您的extend redis会话存储将不得不处理这些事情。您能举出一些使用示例吗?找不到太多关于它的信息。