郭艺宾 · 2020年01月13日

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/net... 01

本文由博客一文多发平台 OpenWrite 发布!
推荐阅读
关注数
2
文章数
50
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息