netty前世今生

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();




}








你可能感兴趣的:(netty前世今生)