在應用程序中, ServerSocket
實例正在接受連接 並將其傳遞給線程。該端口 上的連接全部都是線程化的 - 一個線程用於一個連接。套接字監聽器看起來是這樣的:ServerSocket.accept()是一種阻塞方法 - 多個偵聽器加速?
serverSocket = new ServerSocket(port);
for (;;) { // keep listening
Socket socket = serverSocket.accept();
Thread t = new LRcvr(socket);
t.start();
}
什麼,我想知道是,是否有更多的工作要做,以 加快這在插座上的高流量情況。
我特別關心ServerSocket.accept()
。 在多個連接請求中,比如req-1
& req-2
, req-1
在req-2
之前到達端口。但是,插座& req-1
由於某種原因不能及時建立,並且這塊 req-2
正在「聽到」其請求並因此在端口上連接。 這整個事情是因爲方法ServerSocket.accept()
是一個阻塞的。
必須有一個聰明的方法來解決這個問題。它是什麼?
創建多個插座偵聽器聽到&接受連接請求 想到,但會工作 - 如何?我應該多線程的套接字監聽器? 那麼我應該擔心什麼?
注意:我們只能操作一個端口 - 多個套接字不是這裏的一個選項。
TIA
你是什麼意思「新連接的應用程序級處理」 - 你能更具體嗎 – Roam
所有TCP連接的低級內容通常由OS(內核)處理。 OS監聽網絡,識別建立TCP連接的請求,執行所有這些三方握手等等。你在例子中描述的內容可能發生在操作系統級別,但操作系統以非阻塞方式處理連接,不問題在那裏。當你調用accept()時,你基本上要求操作系統給你第一個準備好使用的連接,如果沒有準備好的連接,這個調用會阻塞你的應用程序。通話不會阻止操作系統。我正是這個意思。 – Inspired