【问题标题】:Session sharing with Redis between Node and PHP在 Node 和 PHP 之间使用 Redis 进行会话共享
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 你能指出一些使用的例子吗?找不到太多关于它的信息。
猜你喜欢
  • 2014-07-10
  • 2015-03-14
  • 2017-04-08
  • 2011-12-20
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多