我得到了一个示例项目,如下所示:
现在第3步令我感到困惑。
使用python,我能想到“配置吞吐量”的唯一方法是在字符串中的字符之间设置延迟。
然后调用sleep()
一段确定的时间(这是可配置的部分)
然后对字母
执行相同的操作e
s
t
记录,中间的时间。
然而,这看起来很愚蠢,因为我根本不会影响客户端和服务器之间的关系,只是在发送的字符之间设置延迟。
或者我错过了什么?实际上是否存在“配置”客户端A吞吐量的方法,如果是这样,那意味着什么?
谢谢。
答案 0 :(得分:1)
您可以在更宽的窗口(例如1秒)内配置客户端A的吞吐量。首先发送包含1个字符的单个数据包将会对[...]产生负面影响。您的吞吐量,因为您的有效负载与将附加的标头相比要小。
您可以实现可观的可测量吞吐量的方式是发送MSS数据包(在以太网环境中通常为1460字节)。现在你可以做如下的事情 - 发送'突发' ' n'每秒数据包。所以,例如。如果您需要吞吐量14600,那么
burstsize = 10
for i in range(burstsize):
sock.write(data)
每一秒钟。现在你如何实现 - 一秒钟?嗯,它有点棘手,很难准确 - 但这样的事情。
在time.time()
之前执行for
,在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来衡量周转时间。