我們有一個應用程序,通過TCP套接字發送數據。我們爲此使用8個TCP連接。套接字發送和接收在後臺線程中調用。只有一個線程遍歷套接字數組來發送數據(順序)。線程中TCP套接字的奇怪行爲
在發送線程的代碼是一樣的東西:
for(i = 0; i < 8; i++) {
nBytesWrriten = send (tcpsock[i], data2, nleft, 0))
//error handling and process more data
}
和接收線程是這樣的:
for(i = 0; i < 8; i++) {
sz[i] = recv (tcpsock[i], data, MAX_UDT_SIZE, 0);
//process data
}
一切工作正常,得到的數據傳輸,但有時它只是時間太長。 在檢查日誌時,我發現在大多數情況下,發送者線程工作得很好,但有時候,'發送'呼叫之前和之後在時間戳(有時超過一秒)方面存在巨大延遲。
所有發送和接收操作都發生在工作線程中。在發送呼叫之前/在發送呼叫之前是否需要搶佔線程?我可以在發送呼叫之前避免搶佔線程嗎?還是說接收線程在發送準備好更多的數據時沒有收到套接字上的數據,因此會導致延遲?
如何優化它,因爲發送數據花費的時間太長?
謝謝
您可以使用像[Wireshark](http://www.wireshark.org/)這樣的工具來檢查是否有任何延遲低於您的應用程序。 – Default
你的套接字是否阻塞('O_NONBLOCK')?如果不是,直到所有的數據已被本地TCP堆棧接受(這隻與線路上的內容有關,可能是立即的或可能需要一些時間),send()調用纔會返回。包括wireshark/tcpdump跟蹤可能會有所幫助。 –