美文网首页
BIO(Blocking IO)

BIO(Blocking IO)

作者: silence_J | 来源:发表于2020-04-15 11:34 被阅读0次
    • 模型


      BIO.png

      这种模型每有一个客户端进行连接,服务端就会创建一个线程进行处理。

    • demo实例如下:
      Server:
    public class Server {
        public static void main(String[] args) throws IOException {
            ServerSocket serverSocket = new ServerSocket(); // 实际中要做try catch处理
            serverSocket.bind(new InetSocketAddress("127.0.0.1", 8888));
            while (true) {
                Socket socket = serverSocket.accept(); // 阻塞方法
    
                new Thread(() -> {
                    handle(socket);
                }).start();
            }
        }
    
        static void handle (Socket socket) {
            try {
                byte[] bytes = new byte[1024];
                int length = socket.getInputStream().read(bytes); // 阻塞
                System.out.println(new String(bytes, 0, length));
                // 通道是单向的
                socket.getOutputStream().write(bytes, 0, length); // 阻塞
                socket.getOutputStream().flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    Client:

    public class Client {
        public static void main(String[] args) throws IOException {
            Socket socket = new Socket("127.0.0.1", 8888);
            socket.getOutputStream().write("[Client]-->Hello Server".getBytes());
            socket.getOutputStream().flush();
    
            System.out.println("write over, waiting for msg back ...");
            byte[] bytes = new byte[1024];
            int len = socket.getInputStream().read(bytes);
            System.out.println(new String(bytes, 0, len));
            socket.close();
        }
    }
    
    • 为什么要创建一个新的线程?
      因为bio的server是阻塞的(accept是阻塞方法),处理client连接时若由server直接处理,这时其它client将不能连接。

    此外 handle 方法中 read 和 write 也是阻塞的,如果只是建立了连接而没有传数据,也会阻塞。
    由于bio中各种阻塞,所以效率特别低,并发性也不好,在实际网络编程中很少使用。但是在client少,并发量低的情况下bio简单方便也可使用。

    相关文章

      网友评论

          本文标题:BIO(Blocking IO)

          本文链接:https://www.haomeiwen.com/subject/jioqvhtx.html