2015-05-13 194 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