websocket 消费者可以处理多少数据?

How much data can a websocket consumer handle?

我使用 Django Channels 构建了一个简单的应用程序,其中消费者从外部服务接收数据,然后消费者将此数据发送给另一个消费者的一些订阅者。 我是 websockets 的新手,我有点担心:消费者正在接收大量数据,每秒 100(或更多)JSON 条记录。我应该在什么时候担心此服务崩溃或 运行 出现性能问题?我在做什么有某种限制吗?

没有明确的限制,但是对于消费者的每个实例(打开的连接),您一次只能处理一个 WS 消息是没有意义的。

因此,如果您有一个 websocket 连接并且正在通过该连接发送大量 WS 消息,如果消费者确实处理这些消息(例如将它们写入数据库),则消息队列可能会填满,您将得到一个错误。

他们对此有一些解决方案,

  1. 打开多个ws连接并分担负载

  2. 在你的消费者中,在做任何需要时间的工作之前,把它放在一个 work queue 上,并让一些后台任务(你不等待)使用它。

对于第二个选项,在您的 on_connect 方法中创建此后台队列并处理关闭它可能是个好主意 down/waiting 以便它刷新断开连接方法中的所有内容。

--

如果您需要大量数据并且不想花钱购买昂贵的(高内存)VM,您最好使用未写入 python 的服务器。

我对 python 开发人员的建议是 https://docs.vapor.codes/4.0/websockets/ 这是一个 Swift 服务器框架,Swift 在语言上非常接近 TypeAnotated python 所以比其他高性能选项更容易为 python 开发人员选择。