在服务器和客户端之间设置实时推送API通道的好方法

时间:2012-07-25 20:45:23

标签: django rest heroku server-push pubnub

我正在尝试使用PubNub来设置一个系统,用于将简单的实时消息从我的Web服务器推送到客户端。我在Heroku上运行Django。

特别是,我对如何在服务器和客户端之间建立通道感兴趣,这需要在两者之间共享唯一的通道ID。

我们的网站是一种社交网站 - 许多用户将立即登录。我们只想要一种方法来更新他们的界面,当他们得到类似新消息或朋友请求的东西,而无需刷新。

我知道该怎么做,但我认为可能有一些我不了解的最佳实践,所以我想得到一些反馈。

  1. 登录时,客户端发布到API端点
  2. 此POST的处理函数检查数据库中是否已存在该用户的通道ID记录。
  3. 如果是,则使用新的通道ID(即UUID)更新记录。如果没有,它会使用此用户的ID和频道ID创建新记录。
  4. 将频道ID返回给用户。
  5. 注销时,此记录将被删除。
  6. 从技术上讲,我担心这违反了REST原则。对API端点的单次调用既可以创建数据服务器端,也可以像POST一样,并将数据返回给客户端,如GET。

    我很欣赏有关最佳实践的任何想法。谢谢!

1 个答案:

答案 0 :(得分:4)

听起来你会因使用Pusher而受益。它们或多或少是事实上托管的websockets提供程序,它允许客户端(通过带有套接字的浏览器)订阅Pusher,监听各种渠道。然后,您可以向Pusher发送简单的API调用,并将其广播到所有连接的客户端。

这是最好的方法,可以处理一次登录的许多客户端的实时更新,而无需通过AJAX进行轮询或滚动自己的websockets内容。

我强烈建议给推看一看。 (作为一个说明,他们的免费等级非常慷慨。)