使用websocket扭转反应器的吞吐量是多少?

时间:2017-10-25 19:21:34

标签: multithreading asynchronous websocket twisted daemon

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

我看到3个可能的选择:

  1. 使用1个线程,连接到所有websocket端点并调用reactor.run()。
  2. 每个websocket连接属于它自己的线程,它有自己的reactor.run()。将它作为一个主要的unix守护进程运行,产生所有线程。
  3. 每个websocket连接都属于自己的线程,在不同的脚本中作为unix守护进程运行。
  4. 最强大的选择是什么?非常感谢!

1 个答案:

答案 0 :(得分:0)

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