如何缩放“读取的消息”和“正在写入…”的聊天function?
我已经看到很多关于如何scale chats
的问题,但是他们似乎都没有解决这两个function的问题,这些function可能会显着增加http请求的数量。
例:
当n
个人正在聊天时,每个人都发送消息,这是1个HTTP请求,以及(n-1)
被推回的消息。
现在,每当有人“读取”消息(例如在$(input).on('focus')
时触发),它是(n-1)
倍新的http请求和(n-1)²
被推回的消息。
每次有人发信给他开始写的其他人,这是一个新的HTTP请求,其次是n-1
websocket消息。
但是,既然每条消息都有一个机会,他根本没有发送任何东西(但是要清除他的消息,而不是写作),我们可以假设它至less是(n-1)*k
k>1
表示在发送之前写/擦除他的作品的人的倾向
考虑4人聊天,其中一人发送一条消息的聊天。
案例一 – 没有function| 1 http
请求, 3 websocket
消息
情况二 – “留言阅读function” 只有 | 4 http
请求, 12 websocket
消息
情况三 “ 正在写…function, k=1
| 2 http
请求, 6 websocket
消息
总结: 1 http / 3 ws
vs 6 http / 18 ws
仅用于一个消息并且假设k = 1
我在我的应用程序中使用node.js
& pusher
,在我开始实施这两个之前,我想确保我的成本不会litteraly爆炸哈哈。 有关Facebook如何做到这一点,数十亿条消息的线索? (我不知道成本是一个问题,但他们)
有一个聪明的方式来实现和扩展这两个function,例如一个websocket提供者,例如Pusher
?
我卡住了。