1
我正在處理客戶端服務器體系結構。我將大約8000000字節的數據從客戶端發送到服務器。我有點驚訝地發現,我的客戶端可以在704毫秒內發送數據,但是服務器需要3922毫秒才能接收這些數據。服務器比使用TCP的客戶端需要更多的時間
雖然我沒有對服務器端的數據做任何操作,只是簡單地接收它。客戶端和服務器硬件架構也一樣。我檢查了使用WIRESHARK的數據流,但在那裏它似乎是~6 times
客戶端和服務器時間之間的區別?
- 什麼是關於爲什麼服務器總是比客戶端需要更多時間的一般假設?
- 開銷(TCP,UDP,以太網報頭)如何影響通信。
注意:我使用std::Clock()
來測量我的客戶端和服務器的執行時間,使用以太網連接將數據傳輸到服務器。
統計:
- 8000000字節(client704毫秒,服務器3922ms)
- 8000個字節(client7175毫秒,服務器13188ms)
- 8億個字節(client72797毫秒,服務器77719ms)
- 80億字節(client72797 ms,server 77719ms)
//客戶端代碼
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;
}
你可能在測量錯誤的東西。告訴我們你的代碼。 – SLaks
尤其是,您可能正在測量寫入緩衝區所需的時間。 – SLaks
@SLaks我想代碼可能不是必需的,你可以看看我剛剛添加的統計信息。對不起,以前的版本我糾正了一些事實。爲什麼我看到這樣的差異,即數據量增長時的時間差較小? – User