实时Socket.IO缩放问题-python
我正在尝试做一些类似Facebook上的流的事情,使用socket.io 0.6和tornadio 每个用户的墙上都有自己的comet频道/组。 我正在向我所有的朋友(即使他们不在线)发送comet消息 问题在于伸缩性:如果我有一百万个朋友怎么办?在所有的墙上写字要花很长时间实时Socket.IO缩放问题-python,python,real-time,socket.io,tornado,Python,Real Time,Socket.io,Tornado,我正在尝试做一些类似Facebook上的流的事情,使用socket.io 0.6和tornadio 每个用户的墙上都有自己的comet频道/组。 我正在向我所有的朋友(即使他们不在线)发送comet消息 问题在于伸缩性:如果我有一百万个朋友怎么办?在所有的墙上写字要花很长时间 使用comet有没有更有效的解决方案?这是社交领域的一个难题。两种方法之间存在权衡: 推送:当用户生成事件(例如状态更新)时,您将该状态更新推送到每个用户的好友流中。当用户加载其流时,您只需从单个位置读取记录 pull:
使用comet有没有更有效的解决方案?这是社交领域的一个难题。两种方法之间存在权衡:
- 推送:当用户生成事件(例如状态更新)时,您将该状态更新推送到每个用户的好友流中。当用户加载其流时,您只需从单个位置读取记录
- pull:当用户生成事件时,您甚至会将其写入用户的数据记录。当用户加载他的流时,您会轮询他的每个朋友的数据记录,动态聚合结果
为了简单起见,我建议您实现pull模型。缓存聚合结果,并仅在缓存条目过期一段时间后刷新用户的提要。我们已经针对用户首次进入页面的情况开发了pull。我们需要高效的推送实时更新(这样用户就不需要刷新页面)。您是否只推送当前登录并处于活动状态的用户?如果你只推给那些用户,你还存在可伸缩性问题吗?事实上,这不是一个选项,因为写给我所有的朋友会花费很长时间,如果我必须验证我的100万朋友是否已登录并处于活动状态,这将花费很长时间。为什么不保留一个活动用户ID列表?然后,如果你在内存中加载了100万个好友用户ID,只需与活动集相交,然后只更新这些ID?