K哥打算写Netty了,有深度的那种~

2021-08-27 17:03:14 浏览数 (1)

现在K哥没什么读者,麻烦点下面小名片,关注一下呀!

大家好,我是Kuls。

已经很久很久没有连更一些系列文章了。

因为最近准备秋招,再加上自己对Netty比较感兴趣。

所以打算之后的日子,每天跟大家一起学习Netty相关的源码。

如果感兴趣,赶紧给K哥一个关注吧!

Netty是个啥?

今天这篇文章主要来介绍介绍Netty是个啥玩意。

(小声bb:不会吧不会吧,你真不知道Netty是啥吗)

可能很多同学听说过,但是可能没用过。

首先来看看百度百科怎么说的吧:

Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

从上面,我们可以提取几点信息:

  • 开源
  • 网络应用程序框架
  • 快速开发
  • 高性能
  • 高可靠

首先,开源不用多说,如此优秀的一个框架,肯定是全世界各路大神一起创造的结晶。

网络应用程序框架,也就是说明它是用来进行网络传输的,也就是说我们会接触到一些网络层的东西。

快速开发,说明这玩意上手快,间接的说明:不难?

高性能和高可靠,这两点其实也就说明了为什么Netty如此火,到底有多火,我下面给大家说。

为啥要学?

知道了Netty是个啥玩意,接下来我们得知道为啥要去学习它。

Netty在非常非常多的大厂都有着很广泛的应用,包括阿里巴巴、腾讯、美团等一线互联网公司。

同时也有非常多的开源框架也使用Netty来当做网络传输的必备工具

服务治理:Apache Dubbo、gRPC。

大数据:Hbase、Spark、Flink、Storm。

搜索引擎:Elasticsearch。

消息队列:RocketMQ、ActiveMQ

上面只是列举部分。

自然而然,很多大厂的面试中也会涉及到非常多的Netty相关知识。

特点

上面也说了几个特点,但是下面这几个才是我们程序员重点关注的。

1、异步事件驱动框架,用于快速开发高性能服务端和客户端。

2、封装了JDK底层BIO和NIO模型,提供高度可用的API

3、自带编解码器解决拆包粘包问题,用户只用关心业务逻辑

4、精心设计的reactor线程模型支持高并发海量连接

5、自带各种协议栈让你处理任何一种通用协议都几乎不用亲自动手

不懂没关系,后面我们都会一一说道!

网络通信socket

上面说了很多关于Netty的知识,下面我们还是回归到原始。

看看Java是如何来进行网络通信的,在后面文章我们就可以拿Netty来进行比较,看看是不是真的方便和高效。

这里我给大家写了两个类,一个Server、一个Client

Server.java

代码语言:javascript复制
public class Server {
    public static void main(String args[]) throws IOException {

        int port = 8899;
        //定义一个ServerSocket监听在端口8899上
        ServerSocket server = new ServerSocket(port);
        //server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的
        Socket socket = server.accept();
        //跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。
        Reader reader = new InputStreamReader(socket.getInputStream());
        char chars[] = new char[64];
        int len;
        StringBuilder sb = new StringBuilder();
        while ((len=reader.read(chars)) != -1) {
            sb.append(new String(chars, 0, len));
        }
        System.out.println("from client: "   sb);
        reader.close();
        socket.close();
        server.close();
    }
    }

Client.java:

代码语言:javascript复制
public class Client {

    public static void main(String args[]) throws Exception {
        //为了简单起见,所有的异常都直接往外抛
        String host = "127.0.0.1";  //要连接的服务端IP地址
        int port = 8899;   //要连接的服务端对应的监听端口
        //与服务端建立连接
        Socket client = new Socket(host, port);
        //建立连接后就可以往服务端写数据了
        Writer writer = new OutputStreamWriter(client.getOutputStream());
        writer.write("Hello Server.");
        writer.flush();//写完后要记得flush
        writer.close();
        client.close();
    }

}

上面就是Java中通过socket来进行网络通信,大家可以把代码放在自己的IDE上跑跑。

Server里面主要是通过new ServerSocket(port);来建立一个Server端。

然后客户端Client通过new Socket(host, port);来连接到Server

通过这样来进行一个简单的通信。

大家要对基本的socket通信要有所掌握,因为你会发现Netty当中很多与其类似!

但是Netty处理的会更加的巧妙。

好了,今天这期算是我们的开篇,如果你想要把Netty源码学一遍,可以关注我,基本都会日更!

我是K哥,下期见~

今日读者数:753

目标:1000

加油

0 人点赞