关于netty
netty与我的境遇发生在给别人写课设之中!!!
听起来是不是很意外,那是一个夜黑风高的夜晚,外面下着大雨,皎洁的夜光照在我的脸上,此时一名joker正在看这篇博客……………(皮一下🤭)
netty官方源码(例子及用法说明一应俱全):https://netty.io/wiki/index.html
netty在github的源码地址:https://github.com/netty/netty
netty是我第一次关于服务器方面的应用开发的学习,虽然学校并没又这一门课,但是感觉还是蛮重要的而且很有趣就试着自学一下。
netty是什么
netty是一个异步的,事件驱动的网络编程框架。
netty是一个基于NIO(非阻塞IO)开发的网络通信框架。既然说到了NIO就提一下BIO(阻塞IO)。
NIO,同步非阻塞IO,阻塞业务处理但不阻塞数据接收,适用于高并发且处理简单的场景,比如聊天软件。
BIO,同步阻塞IO,阻塞整个步骤,如果连接少,他的延迟是最低的,因为一个线程只处理一个连接,适用于少连接且延迟低的场景,比如说数据库连接。
两种I/O模型的对比:
可以清楚的看到NIO在处理单线程的连接数量要比BIO高出很多。
netty与tomcat
netty与tomcat一样,都是基于java的web服务。两者最大的区别在与通信协议。tomcat是基于http协议的,而netty则可以通过编程自定义各种协议。而且,netty调用API及其简单容易。
netty的优势
1、并发高
2、传输快
3、封装好
前面已经说过,netty是一款基于NIO开发的网络通信框架,NIO是多个Socket对一个Selector,而BIO是一个Socket对一个Selector,在处理连接数量上NIO要比BIO高出很多,这也是为什么netty的并发性高的原因。
其次,netty依赖了NIO”零拷贝“特性,当他需要接收数据的时候,他会在堆内存之外开辟一块内存,数据就直接从IO读到了那块内存中去,在netty里面通过ByteBuf可以直接对这些数据进行直接操作,从而加快了传输速度。Java的内存有堆内存、栈内存和字符串常量池等等,其中堆内存是占用内存空间最大的一块,也是Java对象存放的地方,一般我们的数据如果需要从IO读取到堆内存,中间需要经过Socket缓冲区,也就是说一个数据会被拷贝两次才能到达他的的终点,如果数据量大,就会造成不必要的资源浪费。
Netty封装了NIO操作的很多细节,提供易于使用的API。
根据源码测试echo和http-helloworld:
echo:
helloworld:
源码已发布在gitee上,持续更新地址:https://gitee.com/tordan/study-netty