我正在实施一个客户端服务器解决方案,服务器不断通过TCP向客户端发送消息流。
当我做一些测试并通过代码直接在内存中连接客户端和服务器时,我获得了非常高的吞吐量。当我通过网络使用TCP时,我的吞吐量要低得多。这并不奇怪。但是,我很难诊断和理解瓶颈所在。
似乎客户端没有像服务器生成消息那样快地接收消息。服务器太快了。如果我停止服务器发送任何消息,我可以看到,即使服务器停止发送消息(在应用程序级别),客户端仍然会从几秒钟(最多20秒!)收到来自服务器的一些消息。 所以我猜测TCP正试图变得聪明并且限制服务器消息速率,导致消息排队(有趣的是在服务器上)。
我怎样才能真正确认这是真的发生了什么?如何以编程方式检测此情况?还是用工具? 我在Windows XP下运行,在“网络接口”类别下找到了一个名为“输出队列长度”的Windows性能计数器:“输出数据包队列的长度(以数据包为单位)”。 但是这一直是0(服务器和客户端)......
还有一件事,我期望发送方和接收方都拥有较高的CPU使用率,但它并没有那么高。我再次猜测这是因为网络副作用。 无论如何都要测量TCP处理(校验和和其他东西)产生的开销吗?
为了给你一个想法,服务器每秒发送大约1.5M字节。