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 发布!

  • 相关阅读:
    http://www.cplusplus.com/reference/string/string/find_last_of/

    SQL Server数据库设计表和字段的经验
    AMP产品识别
    水晶头AMP识别
    双绞线的规范和制作经验谈
    VB.net 产生随机验证码
    手把手教您架设Windows2003共享服务器
    使用EasyRecovery Pro 6.04恢复RAW格式硬盘的数据实战
    .NET中各种数据库连接大全
  • 原文地址:https://www.cnblogs.com/guos/p/12187256.html
Copyright © 2011-2022 走看看