目前,我正在用Java设计一个模块,该模块收集数据并在同一目标地址上并行发送不同的API端点。它们使用线程并行发送。
由于它们被发送到相同的目标 IP 地址,因此使用HttpURLConnection
发送信息时是否会出现问题?我认为它们可能使用相同的基本端口/套接字,即使每个传输都使用新的HttpURLConnection
对象。
他们最终会被一个接一个地发送吗?如果连接出现问题(例如超时(,如果逐个发送,每个连接的超时值是否会加起来?
如文档中所述:
Each HttpURLConnection instance is used to make a single request but the
underlying network connection to the HTTP server may be transparently
shared by other instances.
这意味着它可能取决于您正在使用的 JVM。似乎他们最终可能会被一个接一个地发送。
是否应该重用连接的问题是一个连接池和 HttpURLConnection 类本身的实现的问题。它与JVM无关。
如果我们从一天结束时 HttpURLConnection.At 保持不可知的东西,一切都会转化为套接字(端点(和针对套接字的连接。每个终结点可以有多个连接。您的问题的答案是,只要连接没有池化,它们就不会一一发送。
本主题将详细解释套接字和连接的概念。我建议阅读它。
端口和套接字有什么区别?
不过,关于 HttpURLConnection的连接池是可能的,并在此处进行了详细解释:Java HttpURLConnection 和 pooling