你这还不精通NIO(Netty_1)

在这里插入图片描述
OKOK,废话不多说。我回来了。还记得刷完牛客哭得不行的我吗。回首去年太惨了太惨了。好在今年7月份毕业到至今,结果还不算太惨。哈哈哈。
在这里插入图片描述
进入主题,进入主题,施主莫闹,施主莫慌。

大兵长今天被人怼了!!(enmmm博主名称大兵在,打错字了不要在意细节。)

事出有因,听我慢慢到来。
是这样,今天在地铁上,很挤很挤,一个大帅比给一个大漂亮美美讲netty,那叫一个装13,说的我差点都信了。

大兵长能忍?不能、于是上前说道,放开那个大漂亮,让我先来

当时是这样的,在这里插入图片描述

前方高能:

妹妹:啊,你想干嘛。你能告诉我Netty是什么吗?
大兵长:那,那,那必须滴。showTime.

可是,可是,脑子翻江倒海。只有妹妹的漂亮,Netty到底在哪里。呀。在这嘞。

我慢慢进入到里面,一步一步的进入。

呀,快进去了。我的知识海洋,看到了一丢丢。

一:赶紧介绍一下

1. Netty主要是用于服务器通讯相关的各种各类的场景。本质其实也就是一个NIO框架啦。

2. 你去Github上能发现,这就是一个独立的项目,是由JBOSS提供的一个开源框架。
3. 还是异步嘞,基于事件驱动的一个贼牛逼,用于快速开发高性能,高可靠性的网络IO程序。 主要是针对TCP协议,面向客户端高并发应用。

妹妹:手,放哪儿呢。
大兵长:嘿嘿,不好意思。
妹妹:你说本质是NIO,那是不是想要深入了解和学习Netty就必须要先搞一下NIO啊。
大兵长:呦呵,你这个搞很有感觉,那我来给你搞一下NIO.
妹妹:好呀好呀。搞好了,有奖励哦。![请添加图片描述](https://img-blog.csdnimg.cn/e6bbce9d1a5c44c39b3bc7815a7ce81b.png)

废话少说,妹妹都说了,直接走起,进入更深,一眼望去,竟然是黑森林。看来NIO要来了。
不对不对,这之前先从0开始吧。

二:I/O模型

	其实IO模型这玩意儿,妹妹应该是听过的。但还是要给他讲一下。毕竟妹妹学过JAVA基础的吗。

1:IO大家都知道,其实也就是进进出出吗。IO模型也就是进出的模型啦。
2:IO模型:咱们用啥通道进行这个数据的进出(发送和接收)。
3:现在JAVA支持的有三种网络编程模型IO模式:BIO,AIO,NIO

行吧,不喜欢深入的男人不是好男银。
(1)BIO是个啥
BIO,blockIO,block阻塞,同步的IO模型。
传统滴模型,一个连接对应一个线程滴。(海底捞,你吃饭,服务员小姐姐只盯着你,啥也不做,为你服务撒!! you see? you see?)客户端有连接请求(你吃饭),服务器端(海底捞)就要启动一个线程(服务员小姐姐)进行处理。你不吃,人家一直盯着你,小姐姐本来可以做其他事,结果你来了,啥也不做,人家不就浪费时间在你身上了吗。(造成不必要的线程开销)。
在这里插入图片描述

(2)NIO是个啥
NIO:是一个同步非阻塞的模型,服务器实现的模式是一个线程处理好多个请求。为啥会这样,因为多了个多路复用器,这个玩意儿就牛逼格拉斯了,他会不断的轮询到连接有IO请求的就会去处理。(海底捞(服务器)搞了一个红领巾小分队,在那一会儿看看这看看哪儿。你想加酸梅汤,他就过来给你加,然后他再回去小分队带着,等待别人是否需要加酸梅汤啦。)
在这里插入图片描述

(3)AIO是个啥
AIO啊其实是NIO的加强版也就是NIOplus,异步非阻塞,AIO 引入异步通道的概念,采用了 Proactor 模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。

他们都用在哪里?

	应用场景何在?
	1:BIO同步阻塞,是同步的且阻塞的,一般用在连接数较少的情况下。而且对服务器资源要求较高。
	1对1吗。线程消耗较多啦。jdk1.4之前只能用它了。并发还有局限,你懂得。
	2:NIO同步非阻塞。JDK1.4之后都用它。他牛逼啊,连接数多连接短,就是不要一直连接吗。
	还要接受其他请求呢。像我们聊天服务器,服务间通信等,这都是短时连接。所以用它比较好。
	3:AIO nioplus版本。jdk7才开始支持的,但是很少有,多用于连接数多连接长。

什么啊?你要我写一个BIO的例子给你?
可不可以不写啊,算了看你好看。还是写一个吧。
在这里插入图片描述
你看这是流程,很明显我们能知道以下几件事。
1:我们要创建一个服务端吧(海底捞总部)
2:也要搞几个客户吧。(比如大兵长这个逼)
3:也要搞几个线程吧(服务员),如果有能分配给你的服务员,就给你加酸梅汤呗。不然就只能让你等了。

package com.lidadaibiao.biotest;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.*;

/**
 * @author dadaibiaoLi
 * @Desc  海底捞服务器
 * @Date 2021/12/22 12:34
 */
public class HAIDILAOServer {
   
    public static void main(String[] args) throws IOException {
   
        //这里寻思搞个线程池吧,毕竟服务员那么多,总不能来一个人打电话叫一个小姐姐过来吗。这岂不是赔死
        ThreadPoolExecutor fuwuyuanPool = new ThreadPoolExecutor(5, 20, 2, TimeUnit.SECONDS, new LinkedBlockingQueue<>(5));
        //创建一个海底捞 (ServerSocket)  和客户达成共识进来输入6666进行通信点餐
        ServerSocket haidilaoServer = new ServerSocket(6666);
        System.out.println("海底捞分部 开业啦。(服务器启动~~~~~~~~~)");
        //ok现在开始循环通信
        while (true){
   

            System.out.println("海底捞分部(线程)信息id = " + Thread.currentThread().getId() + "名字 = " + Thread.currentThread().getName());
            //监听,等待客户端连接
            System.out.println("等待连接....");
            // 通信 连接 最终会阻塞在accept()
            final Socket socket = haidilaoServer.accept();
            System.out.println("呦呵,一个客户来了~~~");
            //出来一个服务员小姐姐(创建一个线程)去服务(通信)
            fuwuyuanPool.execute(new Runnable() {
   
                @Override
                public void run() {
   
                    //开始服务(通讯)
                    fuwu(socket);
                }
            });
        }
    }
    //服务方法(通讯方法)
    private static void fuwu(Socket socket) {
   


        try {
   
            System.out.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值