gpt4 book ai didi

tcp - 服务器比使用 TCP 的客户端花费更多时间

转载 作者:可可西里 更新时间:2023-11-01 02:54:36 25 4
gpt4 key购买 nike

我正在研究客户端服务器架构。我从客户端向服务器发送大约 8000000 字节的数据。我有点惊讶地知道,我的客户端可以在 704 毫秒内发送数据,但为什么服务器需要 3922 毫秒才能接收此数据。

虽然我没有在服务器端对我的数据进行任何操作,但只是简单地接收它。客户端和服务器硬件架构也相同。我使用 WIRESHARK 检查了数据流,但客户端和服务器时间之间似乎有 ~6 倍 差异?

  • 关于为什么服务器总是比客户端花费更多时间的一般假设是什么?
  • 开销(TCP、UDP、以太网 header )如何影响通信。

注意:我正在使用 std::Clock() 来测量客户端和服务器的执行时间,使用以太网连接将数据传输到服务器。

统计:

  • 8000000 字节(客户端 704 毫秒,服务器 3922 毫秒)
  • 80000000 字节(客户端 7175 毫秒,服务器 13188 毫秒)
  • 800000000 字节(客户端 72797 毫秒,服务器 77719 毫秒)
  • 8000000000 字节(客户端 72797 毫秒,服务器 77719 毫秒)

//客户端代码

    std::clock_t c_start = std::clock();
for( int i = 0; i <100000; i++)// writing data to buffer
{
m_vector.push_back(i);
}
uint32_t siz = (m_vector.size())*sizeof(double);
int total_bytes = 0;
int count=0;
for(int j=0; j<1000; j++)
{
bytesSent = send(ConnectSocket,(char*)&siz, 4, 0);
assert (bytesSent == sizeof (uint32_t));
std::cout<<"length information is in:"<<bytesSent<<"bytes"<<std::endl;
bytesSent = send(ConnectSocket,(char*)m_vector.data(), siz, 0);
total_bytes = total_bytes+bytesSent;
}
closesocket (ConnectSocket);
std::clock_t c_end = std::clock();
std::cout << "CPU time used: "<< 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC<< " ms\n";
WSACleanup();
system("pause");
return 0;
}

//服务器代码

while(1)
{
//code to received data length from the client
int length_received = recv(m_socket,(char*)&nlength, 4, 0);
m_vector.resize(nlength/sizeof(double));

//code to received data length from the client
bytesRecv = recv(m_socket,(char*)m_vector.data(), nlength, 0);
count++;
if((count==1))
{
std::clock_t c_start = std::clock();
}

//1st time data
if((bytesRecv > 0 ))
{
total_br = total_br + bytesRecv;
v1=m_vector;
cout<<"Server: Received bytes are"<<total_br<<std::endl;
}else {break;}

}
closesocket (m_socket);
std::clock_t c_end = std::clock();
std::cout << "CPU time used: "<< 1000.0 * (c_end-c_start) / CLOCKS_PER_SEC<< " ms\n";
WSACleanup();
system("pause");
return 0;
}

最佳答案

  1. 在TCP中发送只是意味着将数据写入本地套接字发送缓冲区。实际将 TCP 段放到网络上是异步的。这意味着即使在您关闭套接字之后,也并非所有数据都已实际传输。所以进行发送方时间测量基本上是没有意义的。

  2. 花费 3922 毫秒来接收这种大小的传输并没有什么了不起的。

关于tcp - 服务器比使用 TCP 的客户端花费更多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22098065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com