传统IO(BIO,NIO)三缺点:
1.基于流,数据流,机械性能消耗大。
2.阻塞,服务器开了一个端口,只要没有客户端连接,它一直处于阻塞状态。
多线程方案,来一个客户端,就给他开个线程单独处理,产生了线程开销很大。
3.读和写并没有完全分离,读和写一定是在同一个线程完成的,读和写一定一起。
NIO解决问题:
1.基于管道,先把通讯的道路修好,轮询处理。
2.非阻塞(好像默认是阻塞,可以设定非阻塞),提高处理效率。
3.读写可以分离的,大大提高通讯效率,
缓冲区做成两个,一个专门读一个专门写
对NIO操作,非常繁琐,读写分离还得分配两个缓冲区,
得开管道,一个比较繁琐的过程,来一个客户端要开一个线程。
这种前提下,我们的NIO框架就产生了。
为解决大家一个操作繁琐的过程,对NIO操作进行封装。
Netty,不仅仅对NIO封装
socket基本通信原理:
第一次,建立连接握手。
知道对方IP地址通不通,要知道对方端口能不能访问。
第二次,开始发送信息
服务端跟客户端,就相当于是进行实际的交互了。
第三次,服务端,要给客户端反馈。
第四次,通信完毕,连接断开或关闭
通信机制:
上层开发:做上层开发的话,是很少直接基础到底层协议的。
底层协议:
规范:
http协议:再熟悉不过
FTP协议:文件传输协议
MAIL协议:又见协议SMTP协议
Netty 封装了很多RPC
RMI就是RPC的一种 RPC>RMI
webService:基于soap这种协议规范,xml里面规定了传输对象类型,
调用方法名,传输到我们调用端的时候还得需要对xml进行解析,解析xml又非常的繁琐。
RMI:协议,字节流协议 序列化(客户端)和反序列化(服务器端)
字节流操作还需要转化成java对象 (socket),
对象的class字节码保存起来,classLoader反射
性能非常低下,
webService,RMI最终都转化成了二进制。
Netty
1.提高通信的性能。
2.对RPC操作进行的封装,使得我们操作简单化。
Dubbo dubbo:// 基于Netty进行封装,类似于RMI
小结:
1.NIO操作进行了封装
2.RPC进行了封装
二.Netty能做什么?
IO框架,只要做网络之间通信,Netty都能做。
三.Netty下的网络协议:
工作原理:
master主线程
work从线程
四:代码:
问题思考 netty为什么没有使用AIO
https://github.com/netty/netty/issues/2515
- 大小: 26.4 KB
- 大小: 280 KB
分享到:
相关推荐
### Java中级面试题:Spring和Netty相关问题详解 #### Spring框架相关问题解析 ##### BeanFactory与ApplicationContext的区别 - **BeanFactory**: - **概念**:BeanFactory 可被视为包含 Bean 集合的工厂类。它...
描述中的 "tony老师netty" 可能是指一位名叫 Tony 的教师或专家,他与 Netty 相关的教学或讲解有关。这可能意味着压缩包中的内容可能是他的教学材料或者他对 Netty 的独特见解。 从标签 "netty" 我们可以确定,这个...
确保每个必要的jar都被包含,这样你就可以顺利编译和运行Netty相关的代码了。 除了基本的编译需求,还需要了解Netty的核心概念,如NIO(非阻塞I/O)、ByteBuf(字节缓冲区)、Channel(通道)和EventLoop(事件循环...
这个“Netty相关文档”可能包含了关于Netty框架的详细资料,包括但不限于API文档、示例代码、教程以及相关的技术博客。 在给定的博文链接中,我们无法直接查看内容,但通常博主会分享使用Netty的心得体会、常见问题...
netty 是基于Java NIO的网络通信架构,文件中包含netty所需jar包
在 Maven 项目中,你需要在 `pom.xml` 文件中添加 Netty 相关的依赖。例如: ```xml <groupId>io.netty <artifactId>netty-all <version>4.x.y.z ``` 编写 `BankGateWay` 类时,你需要继承自 Netty 的 `...
设计模式方面,以下是几个与Netty相关的经典设计模式: 1. **工厂模式(Factory Pattern)**:Netty的ChannelInitializer就是一个典型的工厂模式,它用于初始化ChannelPipeline,根据需求创建并添加相应的处理器。 ...
同时,提供的jb51.net.txt、电子书大全.url、脚本之家.url等资源可能包含与Netty相关的学习资料和社区链接,对于进一步提升Netty技能和扩展知识面非常有帮助。 总之,《Netty in Action》中文版是一本深入浅出的...
在这个项目中,你需要添加 Netty 相关的依赖。打开 `pom.xml` 文件,添加以下依赖: ```xml <groupId>io.netty <artifactId>netty-all <version>4.x.y.z</version> <!-- 替换为最新稳定版本 --> ``` 别忘了...
在运行项目前,确保在 Maven 的 pom.xml 文件中添加了 Netty 相关的依赖。这通常会包括 Netty 的核心库和其他必要的模块,如 transport、codec 等。 通过这个项目,你可以学习到如何使用 Netty 构建高效的网络应用...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在 Netty 中,ByteBuf 是一个高效且灵活的字节缓冲区,它解决了 Java NIO 中 ByteBuffer 的一些限制和不便。 ...
- **dubbo-parent**和**netty-parent**:这些可能是项目源码的父级目录,包含了dubbo和netty相关的模块或子项目,可能包括配置文件、源代码、测试用例等资源,供开发者深入研究和定制化开发。 综上所述,本项目旨在...
- **项目初始化**:通过Maven或Gradle创建新项目,添加Netty相关的依赖库。 #### 二、Netty核心组件解析 - **Channel**:代表一个连接,是Netty I/O操作的基本单元,负责读写操作。每个Channel都有对应的...
- **C 相关项目**:推荐其他与Netty相关的开源项目。 通过这些章节的详细介绍,读者可以全面掌握Netty的各个方面,并学会如何将其应用于实际项目中。无论是对于初学者还是经验丰富的开发者来说,这本书都是一个...
描述 "netty-4.1.16 jar包,包含 netty相关4.1.16所有包!" 表明这个压缩包包含了Netty 4.1.16版本的所有类库文件,这些JAR(Java Archive)文件是Java程序中常用的归档格式,用于打包和分发代码。开发者可以将这个...
本项目是一个基于MyEclipse的Netty实例,包含了Netty相关的jar包,可以直接导入并运行,以了解和学习Netty如何实现消息的收发。 1. **Netty框架概述** Netty是由JBOSS提供的一个Java开源框架,它提供了多种网络...