[英]Why a GET request send 2 requests to the ServerSocket.accept()?
[英]What will happen if two clients send request simultaneously to a ServerSocket that is using a while loop to accept requests
我在兩個不同的計算機上有兩個客戶端,我不知道他們何時發送請求。
這是我必須使用Selector
和ServerSocketChannel
嗎?
例:
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.