(一) Tomcat 源码系列之网络 I/O 模型

今天开始学习 Tomcat 源码, 本系列采用的是 Tomcat 8.5.57 源码构建, 在学习 Tomcat 源码之前, 先来学习基础知识 : 网络 I/O 模型

Java 共支持 3 种网络 /IO 模型:BIO、NIO、AIO

BIO

Blocking IO, 同步并阻塞 (传统阻塞型),一般搭配线程池来使用, 否则只有一条线程在工作! 其中 : ServerSocket#accept() 和 Socket#read()/write() 会阻塞, 如果没有线程池, 只能 一次处理一个连接, 其他连接都会阻塞

BIO 方式适用于 连接数目比较小且固定 的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4 以前的唯一选择,程序简单易理解

编写BIO程序

// 线程池应该用 ThreadPoolExcuter 创建
ThreadPoolExecutor pool = new ThreadPoolExecutor(5, 10,
               5, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10));

try {
   
    ServerSocket serverSocket = new ServerSocket(6666);
    while (true) {
   
        // accept 会阻塞
        Socket socket = serverSocket.accept()
        pool.execute(() -> link(socket));
    }....
}

private static void link(Socket socket) {
   
    byte[] bytes = new byte[1024];
    try {
   
        InputStream inputStream = socket.getInputStream();
        while (true) {
   
            // read 也会阻塞
            int read = inputStream.read(bytes);
            if (read > 0) {
   
                System.out.println("客户端发送 : " + new String(bytes, 0, read));
            }

    	
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值