做了个服务器,接受HTTP请求,将请求进行分析处理,扔给PHP-CGI处理,然后拿到返回信息包装好后写回给浏览器。
但是其中有一个问题不是很清楚,希望有高手解疑下。
比如打开一个网页,同时会发送多个请求,多个请求我由多个线程去处理,但是只要其中一个A线程处理socket的inputstream,比如我打开了输入流进行读的操作,其他线程处理别的请求的输入流操作时就是会处于阻塞状态,只有等A线程完全处理后,由socket写回后,其他的线程才能继续进行,同理就是其实同时只有一个线程是在进行执行状态,其他的都是在等待inputstream阻塞。
我不知道原因是不是同一个端口过来的请求,是不是只能这样处理还是怎么,希望有高手可以回答此问题。
也欢迎大家一起交流下

解决方案 »

  1.   

    单个socket处理应该是单线程的要这样的话还可能处理多线程:    while(! isStopped()){
             Socket clientSocket = null;
             try {
                 clientSocket = this.serverSocket.accept();
             } catch (IOException e) {
                 if(isStopped()) {
                     System.out.println("Server Stopped.") ;
                     return;
                 }
                 throw new RuntimeException(
                    "Error accepting client connection", e);
             }
            
             this.threadPool.execute(
                new WorkerRunnable(clientSocket, "Thread Pooled Server"));
            
         }
      

  2.   

    对 我每个线程都是不同的socket。。为什么打开其中一个 别的都阻塞了
      

  3.   

    这个inputstream是不是有线程安全机制
      

  4.   

    InputStream天生应该是没有的,要有,就是人为逻辑后加上去的,这个需要lz去查
      

  5.   

    客户端请求一个Socket连接对象对应一个端口号
      

  6.   

    自己写了代码测试下,用线程池处理请求SOCKET,没有阻塞啊