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