如何缩放“读取的消息”和“正在写入…”的聊天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.jspusher ,在我开始实施这两个之前,我想确保我的成本不会litteraly爆炸哈哈。 有关Facebook如何做到这一点,数十亿条消息的线索? (我不知道成本是一个问题,但他们)

有一个聪明的方式来实现和扩展这两个function,例如一个websocket提供者,例如Pusher

我卡住了。

    Interesting Posts