2015-05-13 193 views
-3

我試圖製作多線程服務器應用程序,它可以與100個或更多客戶端通信。爲了避免套接字和併發編程,我使用了nio.Selector。它正在工作,但我不確定這是最好的解決方案。我應該如何提出這樣的申請? 這裏是我的服務器部分:多線程應用程序

selector = Selector.open(); 
    channel = ServerSocketChannel.open(); 
    channel.configureBlocking(false); 
    channel.register(selector, SelectionKey.OP_ACCEPT); 
    channel.socket().bind(new InetSocketAddress(host, port)); 

     while (true) { 
     try { 
      if (selector.select() == 0) { 
       continue; 
      } 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
     } 

     Set<SelectionKey> keys = selector.selectedKeys(); 

     for (SelectionKey key : keys) { 
      if (key.isValid()) { 
       if (key.isAcceptable()) { 
        try { 
         registerChanell(); 
        } catch (IOException e) { 
         System.out.println(e.getMessage()); 
        } 
       } else { 
        if (key.isReadable()) { 
         handleCommand(key); 
        } 
       } 
      } else { 
       closeChanell(key); 
      } 
     } 
     keys.clear(); 
    } 
+0

你的問題是相當廣泛的,而不是具體的。您的問題幾乎沒有可見性,所以我們很難提供幫助。 – tmn

+0

這可能會更好地問[代碼審查堆棧交換](https://codereview.stackexchange.com/) – Jon

+2

我投票結束這個問題作爲題外話,因爲沒有錯的代碼,沒有具體請求。它太廣泛了。請查看https://codereview.stackexchange.com/和https://codereview.stackexchange.com/help/how-to-ask,然後考慮在那裏提問。 – Jon

回答

1

我不知道你爲什麼這樣做,爲什麼你不能簡單地編寫一個通用的servlet,你只需要重寫抽象的服務方法。尋找更多的信息javax.servlet.GenericServlet