前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K哥打算写Netty了,有深度的那种~

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

作者头像
Python进击者
发布2021-08-27 17:03:14
3740
发布2021-08-27 17:03:14
举报
文章被收录于专栏:JAVAandPython君JAVAandPython君

现在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

加油💪

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python进击者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Netty是个啥?
  • 为啥要学?
  • 特点
  • 网络通信socket
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档