netty核心概念

Netty架构

在这里插入图片描述
Netty主要由三大块组成:

  • 核心组件
  • 传输服务
  • 协议

核心组件

包括事件模型、字节缓冲区、通信API

  1. 事件模型
    入站事件、出站事件
  2. 字节缓冲区
    Bytebuf
  3. 通信API
    通信API都被抽象到Channel中

传输服务

  1. NIO
    io.netty.channel.socket.nio包用于支持NIO,具体实现使用java.nio.channels包作为基础
  2. Epoll
    io.netty.channel.epoll包用于支持JNI驱动的epoll和非阻塞IO,epoll传输只在linux上获得支持
  3. OIO
    io.netty.channel.socket.oio包用于支持使用java.net包作为基础的阻塞IO
  4. 本地
    io.netty.channel.local用于支持在VM内部通过管道进行通信的本地传输
  5. 内嵌
    io.netty.channel.embedded包用作内嵌传输,允许使用ChannelHandler而又不需要一个真正的基于网络的传输

netty主要构件块:

  • Channel
  • 回调
  • Future
  • 事件和ChannelHandler

Channel

传入或传出数据的载体,可以被打开或者关闭,连接或者断开连接

回调

一个回调其实就是一个方法,一个指向已经被提供给另外一方法的方法的引用。使得后者可以在适当的时候调用前者。
Netty内部使用了回调来处理事件,当一个回调被触发时,相关的事件可以被一个interface–ChannelHandler的实现处理。当一个新的连接已经被建立时,ChannelHandler的channelActive回调方法将会被调用。

Future

Future提供了另一种在操作完成时通知应用程序的方式。这个对象可以看做是一个异步操作的结果的占位符;它将在未来的某个时刻完成,并提供对其结果的访问。

  1. 异步的连接远程节点
ChannelFuture Future= channel.connect(new InetSocketAddress("localhost",888));

connect方法将会直接返回,而不会阻塞。线程不用阻塞以等待对应的操作完成,多以可以同时做其他工作,从而更加有效的利用资源。

  1. 注册一个ChannelFutureListener
future.addListener(new ChannelFutureListener(){
	@Override
	public void operationComplete(ChannelFuture future){
		if(future.isSuccess()){
			ByteBuf buffer = Unpooled.copiedBuffer("Hello",Charset.defaultCharset());
			ChannelFuture ff = future.channel().writeAndFlush(buffer);
		}else{
			Throwable cause = future.cause();
			cause.printStackTrace();
		}
	}
})

事件和ChannelHandler

Netty使用不同的事件来通知我们状态的改变或是操作的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值