簡體   English   中英

如果兩個客戶端同時將請求發送到使用while循環來接受請求的ServerSocket,將會發生什么情況

[英]What will happen if two clients send request simultaneously to a ServerSocket that is using a while loop to accept requests

我在兩個不同的計算機上有兩個客戶端,我不知道他們何時發送請求。

這是我必須使用SelectorServerSocketChannel嗎?

例:

public class Server{

    public static void main(String[] args) {

        try(
            ServerSocket serverSocket = new ServerSocket(1234)
           ){

               while(true) {
                    serverSocket.accept();
                    Thread.sleep(5*1000);
                    //and while its sleeping, second client sends request
               }
           }catch(Exception e){}
    }
}

這是我必須使用Selector和ServerSocketChannel的場景嗎?

不。 一種更常見的解決方案是每個客戶端有一個線程-接受呼叫時,創建一個新線程(或使用線程池中現有的線程)並使用該線程來處理該連接。 原始線程調用再次accept (立即執行-無需睡眠),並為下一個連接生成一個新線程,依此類推。

(異步IO當然具有優勢,但是您不必強迫使用它。)

您不必使用Selector / ServerSocketChannel 相反,對於非常簡單的服務器-您可以簡單地啟動一個新線程來處理客戶端連接。 有關如何使用每個客戶端一個新線程執行此操作的示例,請參閱支持多個客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM