我正在使用TCP服務器,並且想知道我應該通過連接推送多少數據。問題是如果我發送大量數據(例如10 MB)但連接速度很慢(如64 kBit/sec)會發生什麼?數據是否會保留在操作系統的緩衝區中,還是會被推送到互聯網並在某種互聯網提供商服務器中緩衝?測量傳輸速率是否有意義,只能推出與連接可處理的數據一樣多的數據?如何確定應該通過TCP連接推送多少數據?
1
A
回答
1
如果我發送大量數據(例如10 MB)但連接速度較慢(如64 kBit/sec)會發生什麼?
您的send()
將在阻止模式下阻止或在非阻止模式下返回-1/EAGAIN/EWOULDBLOCK
。
將數據留在操作系統
是的緩衝區內。
還是將它推送到互聯網,並在某種互聯網提供商服務器緩衝?
號
會是有意義的測量傳輸速度率,推動了只有儘可能多的數據連接可以處理?
絕對不是。 TCP已經完成了。
2
TCP通常是建立在假設緩衝將發生在任意位置的情況下。有些應用程序會在您自己的應用程序中(當寫入呼叫阻止時),一些會在操作系統中,一些在路由器中,另一些在接收器的操作系統中(應用程序讀取數據之前)。
如果你編寫的數據量非常大,而且鏈接速度要慢得多,你的應用程序將會被阻塞,因爲OS緩衝區的大小是有限的。如果你不希望你需要使用非阻塞API並根據需要返回服務套接字。
如果您關心延遲,那麼TCP並不適合,它會嘗試優化帶寬和公平性。
如果你會嘗試測量寫入端的傳輸速度,只有你會得到一個歪斜的結果,因爲前幾兆字節會飛過,因爲它們被操作系統和路由器排隊,然後一切都會慢下來,大約是真實的速度,但會抖動很多。我看不出有這麼好的理由。
相關問題
- 1. 如何通過tcp連接發送rsa.PublicKey?
- 2. 我們可以通過推送通知發送多少數據?
- 3. 如何找出通過Boost ASIO TCP套接字連接發送了多少數據?
- 4. 通過TCP連接發送XML - 僅發送數據
- 5. 通過TCP接收和發送數據
- 6. Python,如何通過TCP發送數據
- 7. 通過TCP連接發送文件時缺少字節
- 8. 如何通過TCP連接發送字節數組(Java編程)
- 9. 通過TCP發送數據
- 10. 通過tcp連接發送大文件
- 11. 通過單個TCP連接複用多個TCP連接
- 12. 通過TCP發送MQTT連接數據包c
- 13. 如何通過TCP/IP C正確接收所有數據#
- 14. 通過UDP接收數據並通過TCP發送
- 15. 確定tcp連接狀態
- 16. 如何通過自定義BroadcastReceiver接收分析推送通知JSON數據?
- 17. 通過連接發送數據
- 18. 通過UDP連接發送數據(Bridge)
- 19. 如何通過使用Perl的TCP連接發送多個文件?
- 20. 試圖瞭解我通過TCP連接發送/接收的UART數據包
- 21. 使用POCO C++通過TCP連接發送和接收OOB數據
- 22. C#套接字。在慢速連接上通過TCP/IP發送數據
- 23. 如何通過編程方式確定推送通知狀態?
- 24. 通過TCP套接字發送和接收數據的問題
- 25. 如何通過不同的端口建立多個TCP連接?
- 26. Python通過TCP發送數據結構
- 27. 通過MultiPath TCP發送數據
- 28. c#通過TCP連接接收來自GPS的數據
- 29. 如何通過推送txt文件連接到雲代工廠?
- 30. 如何通過藍牙連接推送/獲取git存儲庫?