使用多个HttpURLConnection的问题并行发送?
问题描述:
目前,我正在设计一个Java模块,收集数据并将它们并行发送到不同的API端点相同的目标地址。他们正在使用线程并行发送。使用多个HttpURLConnection的问题并行发送?
因为它们被发送到相同的目标IP地址,所以在使用HttpURLConnection
发送信息时会出现问题吗?我认为他们可能使用相同的基本端口/插座,即使每次传输使用新的HttpURLConnection
对象。
他们最终会被一一送出吗?如果连接有问题(例如超时),那么每个连接的超时值是否会逐个加总?
答
正如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。看起来他们可能最终被一一送出。
答
连接是否应该被重用的问题是连接池问题和HttpURLConnection类本身的实现。它与JVM无关。
如果我们保持与HttpURLConnection不可知的东西。在一天结束时,所有事物都转化为套接字(端点)和以套接字为目标的连接。每个端点可以有多个连接。你的问题的答案是,只要连接没有汇集,它们就不会被逐一发送。
本主题非常详细地解释了套接字和连接的概念。我会建议阅读它。
What is the difference between a port and a socket?
连接对于HttpURLConnection类的池是可能的,但并详细说明如下:Java HttpURLConnection and pooling
你可以看一下'bezet'的回答上面?这就是我所指的,我很谨慎,他们都使用相同的底层连接。 –
@ stoneman_41我不认为连接的重用与JVM有什么关系。如果连接被重用,它就是HttpURLConnection本身的实现,而不是底层的JVM。如果使用连接池,则可能会发生连接共享。再次与JVM无关。我仍然支持我的回答。 –