【问题标题】:Python Port/Socket multiple connection on same port, How to maintain stable connectivity for each client (expected 1 million clients )同一端口上的 Python Port/Socket 多个连接,如何为每个客户端保持稳定的连接(预计 100 万个客户端)
【发布时间】:2015-09-23 14:17:34
【问题描述】:

逻辑:

客户端 Python 中的服务器端口监听脚本(例如 TCP 端口 11112)

  • 每个客户端设备(例如 GPS 设备)都连接到服务器端口并建立成功连接。
  • 连接后,我们需要保持该特定设备的连接有效且稳定。
  • 在并行中,我们需要接受来自同一端口中其他设备的连接。
  • 我们在 python 中使用多线程概念实现了这一点。一个线程将与一个设备建立专用连接。
  • 一旦一段时间内没有数据,线程将被关闭。

到目前为止,此逻辑适用于 20 个并行连接的设备。

我们预计很快将与 100 万台设备建立连接。 在 python 中处理设备和服务器之间大量活动连接的最佳解决方案是什么?

注意:我们可以设置多个端口并确保端口之间共享负载,但活动连接限制(Alternate for Threading)必须是我们的重点。

【问题讨论】:

  • 你绝对应该使用asyncio 或类似的框架。
  • 当您达到该连接数时,即使 TCP 每个连接的内存开销也过多。 Trickles 被提议作为解决方案,因为它对于服务器来说是无状态的。

标签: python multithreading sockets tcp multiprocessing


【解决方案1】:

您的问题通常称为c10K problem。通常,线程或进程会引入太大的开销来处理如此多的连接。

可用的解决方案不胜枚举,从切换到对并发更友好的语言(例如 Go 或 Erlang)到采用专注于解决此问题的特定 Python 框架。

对于 Python,您可以查看以下库:

https://twistedmatrix.com/trac/

http://www.gevent.org/

https://docs.python.org/3/library/asyncio.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-13
    • 2017-09-12
    • 1970-01-01
    • 2012-01-18
    • 2017-05-16
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    相关资源
    最近更新 更多