Netty实战 - 1. 基本概念

1. Netty简介java

Netty是由JBOSS提供的一个java开源框架。
它提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
Netty是一个基于NIO的客户端/服务器端编程框架。编程

Netty的成功案例:
Alibaba Dubbo, HornetQ, Vert.x, Apache Cassandra, and Elastic Search上述著名产品都使用Netty
编写其核心的网络通讯模块。服务器

 

2. Netty核心组件网络

■ Channels
■ Callbacks
■ Futures
■ Events and handlers框架

2-1) Channel
Channel是一个基本的Java NIO结构。
它表示链接到一些实体,这些实体能够是硬件设备,一个文件,一个网络套接字,或者一个
执行一些独立I/O操做的程序组件,好比读写。
Channel能够打开或关闭, 链接或断开。异步

 

2-2) Callbacks
Callbacks也就是咱们常说的回调函数。
在Netty中咱们在事件中使用回调函数:
好比channelActive()回调函数用于在创建链接的时候,看下面的例子:ide

public class ConnectHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("Client " + ctx.channel().remoteAddress() + " connected");
     } 
}

 

2-3)Futures函数

当一个操做结束的时候,咱们能够经过Future来通知应用程序。工具

它就像一个异步操做的返回结果的占位符(placeholder)。
在将来的某个时间点结束,而且能够提供访问。性能

这里你会想到Java基本类的java.util.concurrent.Future

可是JDK的Future有点累赘,它会让你在程序未结束以前一直处于阻塞状态,你必须进行手工的检查,性能有点差!

Netty提供了对于Future的本身的实现ChannelFuture,它提供了五阻塞的Future结构。

 

异步链接

Channel channel = ...;
// 无阻塞的异步链接Future结构
ChannelFuture future = channel.connect(new InetSocketAddress("192.168.0.1", 25));

 

咱们还能够在ChannelFuture中注册ChannelFutureListener来监听
异步数据传输的状态,以便咱们作出进一步的处理,例如:

Channel channel = ...;
ChannelFuture future = channel.connect(new InetSocketAddress("192.168.0.1", 25));
future.addListener(new ChannelFutureListener() {
    @Override
    public void operationComplete(ChannelFuture future) {
        if (future.isSuccess()){
            ByteBuf buffer = Unpooled.copiedBuffer("Hello",Charset.defaultCharset());
            ChannelFuture wf = future.channel()
                .writeAndFlush(buffer);
            ....
        } else {
            Throwable cause = future.cause();
            cause.printStackTrace();
        } 
    }
});
相关文章
相关标签/搜索