【发布时间】:2016-01-12 10:50:54
【问题描述】:
我在 Windows 2008 服务器机器上的 IIS 中使用 PHP over CakePHP 框架运行了一个 Web 应用程序。
现在,此应用程序每 6 秒轮询每个连接的用户以刷新部分屏幕,这会导致向 IIS 服务器发出请求,并在 Oracle 数据库繁忙时减慢整个系统的速度。
为了解决这个问题,我正在考虑使用 Node.js 来解决这个问题并使用推送通知。这样,Node 每 6 秒就会向所有活动的浏览器客户端推送通知。
我面临的问题是我正在拨打的电话正在使用 登录用户 会话。 (调用数据库,一旦我得到数据,更新会话)。
我读过Redis 可以解决这个问题,我也见过posts explaining how to share the session。但有些东西我还没有得到:
我如何获得已登录用户的会话? 我应该遍历所有活动会话吗?
我想在节点中创建一个setInterval 来查询每个登录用户的数据库。
【问题讨论】:
-
为什么不让您的 php 和浏览器通过 web 套接字进行通信,让 php 将数据推送到客户端而不是客户端进行池化?抱歉,我不熟悉 php,但在节点中我们使用 web 套接字,它很容易。我的意思是……这就是 websockets 的用途。我猜php也应该支持网络套接字。这样,您就可以整合您的后端。
-
@sagie 在 PHP 中没有像
setInterval这样的东西。 PHP 仅在用户发出请求时运行。否则,您将需要一个 cron 或计划任务,当然,它们也无法访问会话。 (在 Windows 中,最小的触发时间是 5 分钟) -
好的,所以您可能需要查看 php 如何将会话存储在 redis 中,并扩展 express redis 会话存储以读取该格式。问题是许多中间件喜欢在会话上写东西,所以你的扩展 redis 会话存储必须处理这个问题。
标签: php node.js session express redis