为了减少延迟,此类可以为多个请求/响应对重用相同的底层Socket。因此,HTTP连接可能会保持打开的时间超过必要的时间。
这意味着多个HttpURLConnection实例可能共享TCP连接。(另请参阅here)。
假设我有两个单独的后台线程,它们通过两个不同的HttpURLConnection
向相同主机发送请求。如果底层Socket在两个连接之间共享,则服务器返回的数据将同时被两个线程读取并导致数据损坏。
但是在我测试我的Android应用时,我从未遇到过这个问题。那么这是否意味着Socket永远不会被共享,或者我错过了什么?
答案 0 :(得分:1)
声明
为减少延迟,此类可以为多个请求/响应对重用相同的底层Socket。
并不意味着套接字总是被重用,它只是说它们可以被重用。如果两个线程同时使用两个URLConnection
,则它们不能共享套接字,因为多个线程不能同时使用单个套接字。
URLConnection
实现保证单个URLConnection
独立于同一运行时环境中的任何其他连接,因此并行连接无法重用其套接字。
但是,如果一个线程在另一个线程打开其URLConnection
之前关闭其URLConnection
,则它们可以重用现有的套接字。