【问题标题】:separate thread for every connection?每个连接都有单独的线程?
【发布时间】:2012-02-27 16:46:18
【问题描述】:

我目前正在开发一个扭曲的项目,它为连接到服务器的每个客户端建立到另一个源 (basic.lineReceiver) 的连接。

响应链应如下所示:

客户端连接 -> 客户端消息 id 到服务器 -> 服务器建立自定义源连接 -> 服务器不断产生来自源的传入消息的数据 -> 服务器不断向各自的客户端广播数据

来源:客户 - 1:1 关系

我的猜测是将每个源连接分派到一个新线程并监听传入的消息。非常喜欢:

Producing content indefinitely in a separate thread for all connections?

但是在启动后,我将如何在新线程中以扭曲的方式调度与反应器的每个新连接?

【问题讨论】:

  • 在“每个连接一个线程”服务器中,即使是中等数量的同时连接(例如 30 个),性能也会降低。反应器模式是解决这个问题的方法之一,所以我怀疑扭曲是否允许你这样做。
  • 一次不会超过 10 个同时连接。
  • 我可以切换到 1:all 关系并自己进行过滤。但问题仍然是:如何在带有反应器的线程中调度新连接(basic.lineReceiver)。

标签: python multithreading thread-safety twisted


【解决方案1】:

这里的线程是红鲱鱼。您想要的是代理许多(或至少几个)连接。您可以通过多种方式做到这一点,但如果您打算使用 Twisted 来做到这一点,您不妨跳过涉及线程的方式。

查看the existing forwarder in Twisted 以了解有关如何完成此操作的一些想法。

这里的总体思路是,您可以使用 Twisted 设置您的传出连接,然后在任何时候从该传出连接读取数据时接收带有数据的回调。然后,您可以通过传入连接将该数据发送回。 Twisted 为您处理 I/O 并在单个线程(“反应器线程”)中调用您的所有代码,因此不需要额外的线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多