【问题标题】:How much throughput can Twisted reactor handle with websocket?Twisted reactor 可以使用 websocket 处理多少吞吐量?
【发布时间】:2017-10-25 19:21:34
【问题描述】:

我正在设计一个服务,该服务将打开约 30-50 个 websocket 连接,获取金融报价数据并将其写入 MongoDB;每秒可能会收到数百条消息。我正在使用 Autobahn 的 Python Twisted Websocket,但我想知道它在运行一个异步线程时是否可扩展。我的直觉是单线程 Twisted 和 MongoDB 都可以处理这种吞吐量,但我想确认这个假设。

我看到了 3 个潜在的选择:

  1. 使用 1 个线程,连接到所有 websocket 端点并调用 reactor.run()。
  2. 每个 websocket 连接都属于自己的线程,该线程有自己的 reactor.run()。将其作为一个主要的 unix 守护进程运行,生成所有线程。
  3. 每个 websocket 连接都属于自己的线程,作为 unix 守护进程在不同的脚本中运行。

什么是最可靠的选择?非常感谢!

【问题讨论】:

  • 选项 3. 是唯一可以利用多个 cpu 内核的选项。

标签: multithreading asynchronous websocket twisted daemon


【解决方案1】:

就您描述的问题而言,您的应用程序受 IO 限制而非 CPU 限制。如果您要使用异步解决方案,则应尽量避免使用线程。并不是说 Twisted 不支持线程 it does,而是当您以异步方式编程时,线程只是开销。 Twisted 和 Autobahn 可以在开始使用 CPU 之前处理大量 IO。所以只要你的应用程序代码不是很高的 cpu 就可以了。

【讨论】:

    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 2011-10-13
    • 2010-09-27
    • 2013-08-23
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    相关资源
    最近更新 更多