zoukankan      html  css  js  c++  java
  • Netty快速入门(02)Java I/O(BIO)介绍

    BIO简介

    Java I/O,也叫Blocking I/O,也就是阻塞式I/O。

    file

    BIO的流程比较简单,在服务端创立一个ServerSocket去监听,等待连接。客户端创建一个Socket连接过来,服务器端就能接收到连接请求,建立一个连接。连接建立起来后,服务端和客户端就能通过一个流式API进行一个数据通信,进行一些读写操作。

    单线程BIO示例

    来看一个BIO的例子,服务端创立一个ServerSocket,然后等待连接(accept就是阻塞的):

    file

    连接过来以后,使用IO流方式读取和写入数据,处理的方法如下:

    file

    客户端发起Socket连接,然后同样用IO流的方式读取和写入数据:

    file

    上面这些代码相信很多人都写过,也都熟悉,可以看到单线程的BIO编程逻辑清晰,内容简单,(可惜效率低。。。),运行结果如下:

    file

    file

    程序整个过程就是一个单线程的,如果这个时候再来一个客户端连接,那么新来的客户端就无法建立连接,因为上一个连接已经阻塞在while循环中。

    多线程BIO示例

    来看一个多线程的BIO例子,同样是服务端创立一个ServerSocket,然后等待连接(accept就是阻塞的),区别是,来一个连接就启动一个新线程去处理:

    file

    处理的线程方法如下,操作上和单线程的差不多:

    file

    多线程体现在服务端,客户端的写法基本没变,下面我们启动一个服务端和三个客户端,查看效果:

    file

    file

    file

    file

    这种方式明显的缺点就是当连接多的时候,线程数量会爆掉,无法支持高并发的情况。虽然可以使用线程池保护机器,但是无法从根本上解决高并发问题。下面是使用线程池的例子:

    file

    客户端代码一样,此处不再演示。

    代码地址:https://gitee.com/blueses/netty-demo 01

    本文由博客一文多发平台 OpenWrite 发布!

  • 相关阅读:
    rpm命令详解
    Linux基础提高_系统性能相关命令
    Day004_Linux基础命令之特殊符号与正则表达式通配符
    Linux基础_网站权限规划
    Day005_Linux基础之文件权限
    Day003_linux基础_系统启动过程及系统安装后优化
    win7旗舰版安装不了mysql问题-------win7系统版本选择问题的一点探索
    Java程序结构
    NCRE Java二级备考方案
    NCRE的JAVA二级考试大纲
  • 原文地址:https://www.cnblogs.com/guos/p/12187256.html
Copyright © 2011-2022 走看看