2

我需要为某些自定义TCP服务器应用程序同时创建多个TCP连接以进行性能测试。我知道很多这样的网站(即基于libcurlcurl-loader),但我没有找到一些通用网站。
客户端场景最简单:创建连接,发送特殊数据,阅读答案并关闭连接。每一步都有时间戳。所有时间戳都应写入文件以供进一步计算。我需要大约10 000个这样的连接。
我更喜欢一些现成的解决方案,但Google没有发现任何东西,所以我准备用Python编写这个。如果是这样,你能推荐一个合适的python模块来产生这么多的连接吗? (multiprocessing,twisted ..?)用于执行测试的多个同时的tcp客户端连接

回答

0

处理10k连接是一个棘手的问题(称为C10K问题)。如果您需要真正的数字,请坚持使用C++(Boost/POCO库或OS本机API),或者跨10个负载生成客户端分发客户端。

没有办法,你应该用Python来试试这个(在1个CPU内核上处理10'000连接 - 不太现实)。

+0

'socket'是Python中的[C扩展](http://svn.python.org/view/python/tags/r31/Modules/socketmodule.c?view=markup)(至少在Python 3.1.2);除非你在每个连接上产生一个新的线程,因为Python的线程库并不是本地实现的,所以不应该有太多CPU开销。 或者是C++更高效? – 2010-09-03 13:33:20

+0

C++效率更高,并且可以为您提供所有CPU内核。由于GIL,Python随时只能在1核上工作。有了这样的连接,在这里和那里很少的时间花费大部分时间。 – BarsMonster 2010-09-03 13:39:49

+0

Python多线程不是选项,当然。但也许多处理会帮助..? – DominiCane 2010-09-03 13:44:20

1

我的两分钱:

  1. 围棋的扭曲,或任何其他异步联网库。
  2. 确保您可以在客户端和 服务器上打开足够多的文件描述符。在我的Linux系统中,例如,我可以在默认情况下不超过1024个文件 文件描述符:

    [email protected]:~$ ulimit -a 
    core file size   (blocks, -c) 0 
    data seg size   (kbytes, -d) unlimited 
    [..] 
    open files      (-n) 1024 
    [..] 
    
  3. 它可以支付运行客户端,并在不同的机器上的服务器。

+0

我怎样才能扭转很多连接?有一些工作示例/参考吗? – DominiCane 2010-09-06 04:22:59