1netty产生的背景
Netty和Mina
传统的bio三宗罪
1基于流、数据量、机器性能消耗大
2阻塞
3读和写
NIO解决的问题
1基于管道
2非阻塞
3读写可以分离
缓冲区专门读
nio的操作,非常繁琐。分配两个缓冲区
开管道一,一个比较繁琐,一个客户的一个线程
轮训,死循环
这种前提下nio就产生了。解决一个操作繁琐的过程,对nio就行封装。
netty能做什么
netty不仅仅只是对nio的封装。socket。
第一次,建立连接,要握手
知道对方的ip地址痛不痛,要知道对方的端口能不能访问
第二次,开始发送信息
服务端跟客户端,就相当于是进行实际的交互。
第三次
服务端,要给客户端反馈,接受信息,通讯完毕,连接断开,或者关闭。
第四次,通讯完毕,连接断开,或者关闭。
通讯机制:
协议:
底层协议
规范:
HTTP协议:再熟悉不过了。
FTP协议:文件传输协议
MALL协议:邮件协议SMTP协议。
Netty 封装了很多RPC
RMI;协议,字节流协议。就是PRC的一种,性能非常的低下,
webservice。对象class字节码保存起来。xml里面规定了传输字段类型,调用方法名。
1.提高通讯的性能。
websocket 本来http,浏览器使用的http协议,连接拿到数据以后I,
马上就把连接给断开了。
如果我们想一个即时聊天的话。
思路:只能利用ajax不断的去请求服务器端,刷新页面上的聊天记录,实现即使通信功能,被动
轮询服务端,是一个被动的响应。
只能服务端简历一次连接,这个连接不会断了,只能客户端有
信息发送到服务端的话,立马可以响应不要再发送一个新的请求了
否则浪费流量,也会消耗浏览器的性能。
Dubbo
dubbo://基于我们netty进行的封装。类似RMI
zookeeper 配置同步的角色。
小结:
1NIO操作进行了封装
2RPC进行了封装。
二netty能做什么
netty能做
只是一个IO框架,只要是网络之间的通信。
thread pool 线程池
http服务器
工作原理:
分配管道
轮询
handler
输入 thread
输出 thread
evet驱动
工作流pipeline
public class NettyServer{
EventLoopGroup boss=new NioEventGroop();
EventLoopGroup work=new NioEventLoopGroup();
ServerBootstrap b=ServerBootstrap();
b.group(boss,work).channel(NioServerSocketChannel.class).;
sc.pipeline().addLast(new HttpResponseEncoder()).add;
sc.pipeline();
.addLast(new HttpRequestDecoder()).addLast().option()
.childOption(ChannelOption.SO_KEEPALIVE,true);
//开启我们的服务
ChannelFuture f=b.bind().sync();
f.channel().closeFutrue().sync();
f.channel();
}
public static void main(String [] args){
NettyServer server =new NettyServer();
server.start();
}