2015-06-13 66 views
0

我得到了它是这样的一个样本项目:配置客户端吞吐量

  1. 客户端A连接到服务器B
  2. A发送数据包B,B返回相同的数据包发送到
  3. 客户端发送吞吐量可配置
  4. 测量每个数据包的周转时间。

现在第3步是什么令我困惑。

使用python,我能想到的“配置吞吐量”的唯一方法是在字符串中的字符之间设置一个延迟。

  1. 一个字符串“测试”
  2. 启动计时器,然后发送“T”到服务器,让服务器返回。
  3. 一旦服务器返回它,停止计时器并记录它。

然后调用sleep()对于确定的时间量(这是可配置的一部分)

然后执行相同的字母

e 
s 
t 

日志记录,时间在两者之间。

但是,这看起来很愚蠢,因为我根本不影响客户端和服务器之间的关系,只是设置发送字符之间的延迟。

或者我错过了什么?实际上有一种“配置”客户A的吞吐量的方法,如果是这样,那是什么意思?

谢谢。

回答

1

您可以使客户端A的吞吐量可配置 - 在1秒的更宽的窗口内。首先发送带有1个字符的单个数据包会对您的吞吐量产生“负面影响”,因为与负责连接的标头相比,您的有效负载比较小。

您可以获得体面的可测量吞吐量的方式是发送MSS数据包(通常在以太网环境中为1460字节)。现在你可以做到这一点 - 每秒发送'n'包'突发'。所以例如。如果你需要14600的吞吐量,你可以做

burstsize = 10 
for i in range(burstsize): 
    sock.write(data) 

每一秒钟。现在你怎么做到 - 一秒钟?那么这有点棘手,很难准确 - 但是这样的事情。

for之前做time.time(),做一个time.time()for后,再经过,对剩余时间做一个简单的select。 (这是引入延迟的一种方式)。因此,一个广泛的骨架

while True: 
    t1 = time.time() 
    for i in range(burstsize): 
     sock.write(1460) 
    t2 = time.time() 
    if t2 - t1 < 1.0: 
     tout = 1.0 - (t2-t1) 
     select.select([], [], [], tout) # 

这是非常简单的 - 但应该给一个公平的想法如何去做。

测量每个数据包的周转时间非常困难 - 并没有准确地说明TCP网络中的等待时间,因为这将受到TCP流量控制的影响。如果您有兴趣了解底层网络特性(如带宽/延迟),最好使用UDP来衡量周转时间。

+0

明白了。 我认为他们想要的是第一个想法,发送一个大小为n的数据包到服务器。 我不知道为什么我没有想到这一点。 我不认为我现在必须给它一个时间延迟,我想我可以编码它将一个N大小的数据包发送到服务器,用户配置N是什么。 谢谢! – Marcin