我目前正在为我的网络应用程序使用 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/