Netty快速入门(02)Java I/O(BIO)介绍
BIO简介
Java I/O,也叫Blocking I/O,也就是阻塞式I/O。
BIO的流程比较简单,在服务端创立一个ServerSocket去监听,等待连接。客户端创建一个Socket连接过来,服务器端就能接收到连接请求,建立一个连接。连接建立起来后,服务端和客户端就能通过一个流式API进行一个数据通信,进行一些读写操作。
单线程BIO示例
来看一个BIO的例子,服务端创立一个ServerSocket,然后等待连接(accept就是阻塞的):
连接过来以后,使用IO流方式读取和写入数据,处理的方法如下:
客户端发起Socket连接,然后同样用IO流的方式读取和写入数据:
上面这些代码相信很多人都写过,也都熟悉,可以看到单线程的BIO编程逻辑清晰,内容简单,(可惜效率低。。。),运行结果如下:
程序整个过程就是一个单线程的,如果这个时候再来一个客户端连接,那么新来的客户端就无法建立连接,因为上一个连接已经阻塞在while循环中。
多线程BIO示例
来看一个多线程的BIO例子,同样是服务端创立一个ServerSocket,然后等待连接(accept就是阻塞的),区别是,来一个连接就启动一个新线程去处理:
处理的线程方法如下,操作上和单线程的差不多:
多线程体现在服务端,客户端的写法基本没变,下面我们启动一个服务端和三个客户端,查看效果:
这种方式明显的缺点就是当连接多的时候,线程数量会爆掉,无法支持高并发的情况。虽然可以使用线程池保护机器,但是无法从根本上解决高并发问题。下面是使用线程池的例子:
客户端代码一样,此处不再演示。
代码地址:https://gitee.com/blueses/netty-demo 01
本文由博客一文多发平台 OpenWrite 发布!
Netty快速入门(02)Java I/O(BIO)介绍的更多相关文章
- Netty快速入门(08)ByteBuf组件介绍
前面的内容对netty进行了介绍,写了一个入门例子.作为一个netty的使用者,我们关注更多的还是业务代码.也就是netty中这两种组件: ChannelHandler和ChannelPipeline ...
- Netty快速入门(09)channel组件介绍
书接上回,继续介绍组件. ChannelHandler组件介绍 ChannelHandler组件包含了业务处理核心逻辑,是由用户自定义的内容,开发人员百分之九十的代码都是ChannelHandler. ...
- 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现
088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...
- # 095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结
095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)
094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)
093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)
092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 01 static关键字(上)
091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包
090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包
089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
随机推荐
- H3C 网络层
- Python--day19--random模块
random模块 >>> import random #随机小数 >>> random.random() # 大于0且小于1之间的小数 0.766433866365 ...
- -Bash: Unzip: Command Not Found解决方法 安装unzip
利用unzip命令解压缩的时候,出现-bash: unzip: command not found的错误. unzip——命令没有找到,其原因肯定是没有安装unzip.利用一句命令就可以解决了. 命令 ...
- css技巧 1200px居中容器中某个div增加横屏背景
<div class='container' style='width:1200px;margin:0 auto;'> <div style='width:200px;margin: ...
- [转]如何让多个不同类型的后端网站用一个nginx进行反向代理实际场景分析
前段时间公司根据要求需要将聚石塔上服务器从杭州整体迁移到张家口,刚好趁这次机会将这些乱七八糟的服务器做一次梳理和整合,断断续续一个月迁移完 成大概优化掉了1/3的机器,完成之后遇到了一些问题,比如曾今 ...
- ant 脚本 available 及条件判断功能
1. 通过<available property="属性名" file | classname | resource = "被判定是否存在的东西" v ...
- 如何在 centos 7.3 上安装 caffe 深度学习工具
有好多朋友在安装 caffe 时遇到不少问题.(看文章的朋友希望关心一下我的创业项目趣智思成) 今天测试并整理一下安装过程.我是在阿里云上测试,选择centos 7.3 镜像. 先安装 epel 源 ...
- P1056 骑士游历
题目描述 给出一个8*8的空棋盘,其中行由a-h编号,列由1-8编号. 再给出起点和终点,问,骑士至少需要几步可以从起点移到终点.骑士是走日的.类似于中国象棋的马. 输入格式 输入两个字符串,每个字符 ...
- 基于AutoIt3的打印机安装
#Region ;**** 编译指令由 AutoIt3Wrapper 选项编译窗口创建 **** #AutoIt3Wrapper_Icon=favicon.ico #AutoIt3Wrapper_Co ...
- jQuery-自己封装的弹框
(function () { CDK={ cfm:function(resFun,errFun){ var confirm=document.createElement('div'); confirm ...