7

我有一个用 C++ 实现的客户端服务器体系结构,在 Windows 7 下具有阻塞套接字。一切运行良好,达到一定的负载水平。如果有几个客户端(例如 > 4 个)接收或发送兆字节的数据,有时与一个客户端的通信会冻结大约 5 秒。在这种情况下,所有其他客户端都按预期工作。

缓冲区大小为 8192 字节,服务器端的日志记录如下:

TimeStamp (s.ms) - 接收到的字节数

…</p>

1299514524.618 - 8192

1299514524.618 - 8192

1299514524.618 - 0004

1299514529.641 - 8192

1299514529.641 - 3744

1299514529.641 - 1460

1299514529.641 - 1460

1299514529.641 - 8192

…</p>

似乎在那 5 秒内只能读取 4 个字节。此外,我发现冻结时间总是在 5 秒左右——从来没有 4 秒或更短,也从来没有 6 秒或更多......

有任何想法吗?

此致

迈克尔

4

2 回答 2

0

我在高负载情况下遇到过这个问题:TCP数据的最后一个数据包有时会在倒数第二个之前到达,因为没有为包排序定义默认堆栈,这种混乱导致接收到与您描述的结果相似的结果。

采用的解决方案是:在更多的服务器中分配负载

于 2011-03-23T11:13:18.040 回答