我现在的做法是,有心连接进来,开新线程处理
可如果有1万个同时访问,这样可能不太行吧,有什么其他办法解决吗s = ss.accept();
new execute().start();  //有新连接进来,开新线程处理public class execute extends Thread { public void run() {
  try {
   inStream = new DataInputStream(s.getInputStream());
   //业务逻辑
  }
  catch(IOException e) {
   e.printStackTrace();
  }
 }
}

解决方案 »

  1.   

    最多只有 500 个连接被同时处理,后进来的连接处于等待状态。 500 个中有一个处理完了,后面的等待连接,就拿出一个开始处理。
    线程池一般按连接先后进行顺序处理。
    线程池的使用,一般是基于 CPU/IO 处理速度有限制。比如同时处理 500 个,平均相应时间 5 秒。同时处理 5000 个,平均 50 妙,就会让每个用户都不满意。
    与其这样,还不如让先连接的用户正常使用,后连接的用户就傻等吧。这样至少有一部分用户满意。
      

  2.   

    你测试一下看看,单纯链接的话,1万个没有任何问题啊!
    当然,如果你使用32位的java,那么你的应用就惨了。
    如果是64位的,128G内存,你这点小问题是很轻松解决了。 那么多CPU,那么多内存,你怕啥。那时候,核心问题是【带宽】了,你的100M网卡是不行的喽。如果做分布式,或者负载均衡,这个就是另外一个问题了。
      

  3.   

    高性能socket服务端本来就不是JAVA可以做的tomcat,aphache都是C写的,2种模式prefork+worker,多进程+多线程,
      

  4.   

    看你是长连接还是短连接了,比如登录类似的连接就是短连接,只负责和客服端连接认证后就断开连接.
    可以从业务处理的效率,线程池等多方面考虑优化.另外如果是长连接,估计就要采用集群的方式来处理了,前端可以增加一个LVS,这样用户的连接感觉不出很多服务器,只感觉有一个IP和端口.