目前,我正在设计一个Java模块,用于收集数据并将它们并行发送到相同目标地址上的不同API端点。它们是使用线程并行发送的。
由于它们被发送到相同的目标IP地址,使用HttpURLConnection
发送信息时是否会出现问题?我认为他们可能使用相同的基本端口/套接字,即使每个传输使用新的HttpURLConnection
对象。
他们最终会被逐一发送出去吗?如果连接存在问题(例如超时),如果每个连接都是逐个发送的,超时会加起来吗?
答案 0 :(得分:1)
如the docs中所述:
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。看起来它们可能最终被逐一发送。
答案 1 :(得分:0)
连接是否应该重用的问题是连接池和HttpURLConnection类本身的实现问题。它与JVM无关。
如果我们保持与HttpURLConnection不相关的东西。在一天结束时,一切都转换为套接字(端点)和针对套接字的连接。每个端点可以有多个连接。您的问题的答案是,只要连接没有汇总,它们就不会一个接一个地发送。
本主题详细解释了套接字和连接的概念。我建议阅读它。
What is the difference between a port and a socket?
关于HttpURLConnection的连接池是可行的,并在此详细解释:Java HttpURLConnection and pooling