2012-03-07 74 views
2

我在我身邊創建了一個服務器套接字。我不知道客戶端何時連接到我。呼叫服務器套接字接受方法的問題與無限超時

調用的ServerSocket.accept()在我的應用程序沒有設置任何套接字超時會解決我接受的客戶在任何時間點的問題。我在一個單獨的線程中這樣做,所以這不會阻止我的應用程序的另一部分。

我擔心的是,因爲接受()塊直到它得到一個呼叫從一個客戶端就不會這樣消耗任何資源,可能是這樣,如果我沒有得到來自客戶端程序的調用一個星期左右。

是否有任何其他方式接受客戶端連接。我沒有關於客戶端何時調用套接字連接的任何信息,除了它在某些時候調用。

回答

1

有一個與在不同的線程調用accept沒有問題。該線程將在調用accept時被阻塞,並且直到連接入站時纔會被操作系統調度。實際上,如果在整個星期內沒有連接,那麼在此期間,線程將無法在CPU上運行。

因此,它不會消耗任何CPU資源和只有一點內存。

+0

左右我們希望;)它取決於JVM的實現,也許OS(調度)。我同意你的帖子都鐸王朝。 – Adrian 2012-03-07 14:52:40

+0

但會怎麼JVM知道有一個連接入境,可能是內部的JVM內的一些其他線程應該不斷衝擊插座,看看是否有可能消耗資源 – vjk 2012-03-07 14:58:50

+3

「但如何將JVM知道有任何的入站連接連接入站' - 因爲accept()返回。 '可能在JVM內部的某個其他線程應該不斷地敲擊套接字以查看是否有任何入站連接' - 而不是我曾經使用的任何操作系統。調用accept()的線程由來自運行TCP堆棧的內核線程的信號準備好。內核線程反過來由來自NIC驅動器的信號準備好,因此最初來自硬件中斷。沒有投票。就像@Tudor說的 - 如果沒有任何東西想要連接,什麼都不會發生。 – 2012-03-07 16:30:26

相關問題