与REST和PubNub推送架构聊天

时间:2012-05-28 20:45:16

标签: rest web push-notification pubnub

我的聊天应用程序的主要用例是一个代理通常会与一个访客通话。我最多计划支持一个低位数的客人和代理人,但这种功能的使用率非常低。更重要的是,发件人不需要收到他们自己的消息,因为HTTP状态会确认收到消息。

我正在考虑将PubNub用于“仅推送”。因此,每个客户端都会通过HTTP(PUT / POST)向应用程序Web服务器发送消息,并且只通过它自己的PubNub订阅通道接收消息。

当Web服务器应用程序收到HTTP聊天消息时,它会映射消息所在的客户端并将消息发布到那些特定客户端的通道。这是一个调用PubNub.publish(client_channel_id, the_message)

的循环

这样,每个客户端只能订阅一个频道而不是多个频道,每个客户端只接收适合它的消息(即没有全局频道,客户端也没有过滤)。

(我也在考虑使用Redis来保存客户在哪些房间聊天的地图。因此,每次网络应用收到聊天消息时,可能(使用本地缓存)首先检查Redis以映射消息的目标通道...)

潜在问题

  • 在服务器范围内使用单个PubNub连接可能无法很好地扩展。连接池可能会更好地工作。既然我们只是广播这些连接而不是订阅,那么它应该很简单,对吧?

您能否看到此设计存在的任何其他潜在问题?其他评论?

1 个答案:

答案 0 :(得分:0)

此处描述的方法适用于安全地创建聊天应用程序。我建议为每个用户会话创建一个随机生成的频道,以提供额外的安全性,而不是使用 user_id_1234 等频道。每次用户登录时,都会生成一个新的频道名称,例如: YTM0NZomIzI2OTsmIzM0NTueYQ ,并让经过身份验证的用户连接到该频道。因此,在Redis中,您将拥有与用户对象关联的简单键/值。可能是具有Key字段 pubnub_channel 的HKEY,它会更新每个新的会话ID。 http://redis.io/commands/hset