php - 向所有用户显示该事件正在进行中

标签 php node.js redis socket.io laravel-4

我目前正在为我的网络应用程序使用 laravel4。我用过this tutorial使用实时通知。我正在运行 socket.io、nodejs 和 redis,如教程中所示。截至目前,这只是用于 pubsub,我的主要应用程序是一个使用 laravel 4 的 php 应用程序。

我试图解决的问题是,当一个用户开始一个事件时,我想向所有用户显示一个正在加载的 gif(你知道旋转的东西),并继续显示直到事件停止。我知道我可以通过在某个事件启动时使用 socket.io 触发一个事件来更新页面来完成此操作。此事件可能是从 JavaScript 端使用 ajax 的 API 调用。

问题是,如果页面刷新或新用户加载页面,他们将不会收到事件正在发生的通知。这是因为自页面加载以来,没有任何内容发布到该 channel 。如何让事件保持打开状态,以便在事件进行期间每个人都显示加载中的 gif?

最佳答案

也许,如果您使用的是 redis,您可以将事件放入其他类型的数据中。

Pub/sub 不是持久的,所以如果你没有连接,你就会丢失信息。

你可以在用户的​​一个 channel 中使用列表和左放(LPUSH),以及双端队列(RPOP - BRPOP)来回馈用户。 BRPOP 是在 nodejs 中执行此操作的好方法。您建立到 redis 的连接(连接仅用于 brpop ,因为它可以在 redis 上被阻止)发送 rpop 命令并在双端队列上进行回调。 更多信息到blocking deque list and pattern event notification

如果只是用户必须知道的状态,您还可以使用 key (设置和删除,或使用 TTL)

关于php - 向所有用户显示该事件正在进行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20388191/

相关文章:

PHP:如何检查日期是今天、昨天还是明天

javascript - 打开资源管理器到 Node.js 中的特定文件

PHP array_column - 如何保留 key ?

javascript - 从 XMLHttpRequest 访问响应 JSON 数组

php - 如何实现词性 (POS) 标注器

html - 为什么我不能将我的 css 链接到我的 ejs 文件?

javascript - 为什么 Chrome 在 "strict mode"中使用 block 内的函数时仍然保持沉默?

r - R中的doRedis/foreach GBM并行处理错误

node.js - 使用 redis 的 NodeJS - 安装 hiredis 还是不安装?

java - 使用 Vertx 时用于 Redis 的 ORM 框架