page contents

ServerSocket的accept方法阻塞原理是什么,为何页面请求后没有进行阻塞

Pack 发布于 2020-02-26 17:49
阅读 839
收藏 0
分类:Java开发

ServerSocket的accept方法,在页面发起一次请求后,不会执行请求后阻塞,而是再次执行一次代码,执行2遍后再阻塞。

相关代码

   public static void main(String[] args) {

       try {

           String str = "";

           ServerSocket serverSocket = new ServerSocket(8080);

           while (true) {

               Socket socket = serverSocket.accept();

               InputStream stream = socket.getInputStream();

               byte[] bytes = new byte[2048];

               stream.read(bytes);

               OutputStream outputStream = socket.getOutputStream();

               outputStream.write(str.getBytes());

           }

       } catch (IOException e) {

           e.printStackTrace();

       }

   }

}


debug测试

通过debug模式测试,服务端启动后在accept处阻塞,在浏览器里使用localhost:8080发起请求,阻塞取消,执行完后面的代码后,不会再次阻塞,而是继续执行一次,第二次执行的时候bytes里的数据都是空的,之后再才在accept处进行阻塞。


accept的阻塞原理是什么,是通过什么情况判断才会进行阻塞?

458
Pack
Pack

accept表示接收一个连接,当有客户端连接进来时,就会被唤醒。否则,将会阻塞。
具体的底层实现没必要去看,这个和操作系统的实现有关

请先 登录 后评论