2017-08-22 44 views
0

目前,我正在設計一個Java模塊,收集數據並將它們並行發送到不同的API端點相同的目標地址。他們正在使用線程並行發送。使用多個HttpURLConnection的問題並行發送?

因爲它們被髮送到相同的目標IP地址,所以在使用HttpURLConnection發送信息時會出現問題嗎?我認爲他們可能使用相同的基本端口/插座,即使每次傳輸使用新的HttpURLConnection對象。

他們最終會被一一送出嗎?如果連接有問題(例如超時),那麼每個連接的超時值是否會逐個加總?

回答

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。看起來他們可能最終被一一送出。

0

連接是否應該被重用的問題是連接池問題和HttpURLConnection類本身的實現。它與JVM無關。

如果我們保持與HttpURLConnection不可知的東西。在一天結束時,所有事物都轉化爲套接字(端點)和以套接字爲目標的連接。每個端點可以有多個連接。你的問題的答案是,只要連接沒有彙集,它們就不會被逐一發送。

本主題非常詳細地解釋了套接字和連接的概念。我會建議閱讀它。

What is the difference between a port and a socket?

連接對於HttpURLConnection類的池是可能的,但並詳細說明如下:Java HttpURLConnection and pooling

+0

你可以看一下'bezet'的回答上面?這就是我所指的,我很謹慎,他們都使用相同的底層連接。 –

+0

@ stoneman_41我不認爲連接的重用與JVM有什麼關係。如果連接被重用,它就是HttpURLConnection本身的實現,而不是底層的JVM。如果使用連接池,則可能會發生連接共享。再次與JVM無關。我仍然支持我的回答。 –