我目前正在使用laravel4作为我的网络应用。我使用this tutorial来使用实时通知。我正在运行socket.io,nodejs和redis,如教程中所示。这只是用于pubsub,我的主要应用程序是使用laravel 4的php应用程序。
我想解决的问题是,当一个用户启动事件并继续执行直到事件停止时,我想向所有用户显示加载gif(你知道旋转的事物)。我知道我可以通过使用socket.io触发事件来完成此操作,以在某个事件启动时更新页面。这个事件很可能是使用JavaScript端的ajax进行的API调用。
问题在于,如果刷新页面或新用户加载页面,则不会通知事件正在发生。这是因为自页面加载以来没有任何内容发布到该通道。如何保持活动开放,以便只要这个活动正在进行,每个人都会显示加载的GIF?
答案 0 :(得分:0)
也许,如果你使用redis,你可以把事件放在其他类型的数据中。
Pub / sub不是持久的,所以如果你没有连接,你就会丢失信息。
您可以在用户的频道中使用列表并在左侧(LPUSH)使用,并使用deque(RPOP - BRPOP)向用户返回。 BRPOP是在nodejs中执行此操作的好方法。你连接到redis(一个连接只用于brpop,因为它可以在redis上阻塞)一个send rpop命令,在deque上有回调。 有关blocking deque list and pattern event notification
的更多信息如果是用户必须知道的juste状态,你也可以使用密钥(set和del,或者使用TTL)