美文网首页
netty介绍

netty介绍

作者: 44d95011b3f7 | 来源:发表于2018-09-19 11:16 被阅读0次

概念

Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。Netty提
供了一种新的方式来使开发网络应用程序,这种新的方式使得它很容易使用和有很强的扩展性。Netty的内部实现时很复杂的,但
是Netty提供了简单易用的api从网络处理代码中解耦业务逻辑。Netty是完全基于NIO实现的,所以整个Netty都是异步的。

异步设计

异步处理提倡更有效的使用资源,它允许你创建一个任务,当有事件发生时将获得通知并等待事件完成。这样就不会阻塞,
不管事件完成与否都会及时返回,资源利用率更高,程序可以利用剩余的资源做一些其他的事情。

Callbacks(回调)

回调一般是异步处理的一种技术。一个回调是被传递到并且执行完该方法,下面举一个例子。
Data类:

package com.beidao.netty.async.callbacks;

public class Data {

    private int n;
    private int m;
    
    public Data(int n, int m){
        this.n = n;
        this.m = m;
    }
    
    @Override
    public String toString(){
        int r = n/m;
        return n+"/"+m+"="+r;
    }
}

数据抓取接口:

package com.beidao.netty.async.callbacks;

/**
 * @author 0200759
 *
 */
public interface Fetcher {
    void fetchData(FetcherCallback callback);
}

数据抓取接口实现类:

package com.beidao.netty.async.callbacks;

public class MyFetcher implements Fetcher{

    final Data data;
    
    public MyFetcher(Data data){
        this.data = data;
    }
    /* 
     * excute method
     * @see com.beidao.netty.async.callbacks.Fetcher#fetchData(com.beidao.netty.async.callbacks.FetcherCallback)
     */
    public void fetchData(FetcherCallback callback) {
        try{
            //callback method
            callback.onData(data);
        } catch (Exception e) {
            //callback method
            callback.onError(e);
        }
    }

}

回调接口类:

package com.beidao.netty.async.callbacks;

/**
 * @author 0200759
 *
 */
public interface FetcherCallback {

    void onData(Data data) throws Exception;
    void onError(Throwable cause);
}

测试回调函数类:

package com.beidao.netty.async.callbacks;

/**
 * @author 0200759
 *
 */
public class Worker {
    
    public void doWork() {
        
        Fetcher fetcher = new MyFetcher(new Data(1, 0));
        fetcher.fetchData(new FetcherCallback() {
            
            public void onError(Throwable cause) {
                System.out.println("An error accour: " + cause.getMessage());
            }
            
            public void onData(Data data) throws Exception {
                //System.out.println(xx),括号里面的“xx”如果不是String类型的话,就自动调用xx的toString()方法
                System.out.println("Data received: " + data);
                
            }
        });
    }

    public static void main(String[] args) {
        Worker w = new Worker();
        w.doWork();
    }

}

运行结果如下:

An error accour: / by zero

上面的例子只是一个简单的模拟回调,要明白其所表达的含义。Fetcher.fetchData()方法需传递一个FetcherCallback类型的
参数,当获得数据或发生错误时被回调。对于每种情况都提供了同意的方法:

  • FetcherCallback.onData(),将接收数据时被调用
  • FetcherCallback.onError(),发生错误时被调用

Futures

Futures是一个抽象的概念,它表示一个值,该值可能在某一点变得可用。一个Future要么获得
计算完的结果,要么获得计算失败后的异常。Java在java.util.concurrent包中附带了Future接口,它使用Executor异步执行。例
如下面的代码,每传递一个Runnable对象到ExecutorService.submit()方法就会得到一个回调的Future,你能使用它检测是否执行
完成。

package com.beidao.netty.async.futures;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class FutureExample {

    public static void main(String[] args) {
        ExecutorService executorService = Executors.newCachedThreadPool();
        Runnable task1 = new Runnable() {
            
            public void run() {
                System.out.println("i am task1...");
            }
        };
        
        Callable<Integer> task2 = new Callable<Integer>() {
            public Integer call() throws Exception{
                return new Integer(100);
            }
        };
        
        Future<?> f1 = executorService.submit(task1);
        Future<Integer> f2 = executorService.submit(task2);
        System.out.println("task1 is completed?" + f1.isDone());
        System.out.println("task2 is completed?" + f2.isDone());
        
        //waiting task1 completed
        while(f1.isDone()){
            //callback code
            System.out.println("task1 completed!");
            break;
        }
        
        //waiting task2 completed
        while (f2.isDone()) {
            //callback code
            System.out.println("task2 completed!");
            break;
        }
    }

}

下一篇博客将介绍netty的demo

相关文章

  • Netty简单介绍(非原创)

    文章大纲 一、Netty基础介绍二、Netty代码实战三、项目源码下载四、参考文章 一、Netty基础介绍 1. ...

  • Netty学习之Netty介绍

    Netty学习之Netty介绍 前言 本周开始学习Netty,主要的参考资料是《Netty In Action》原...

  • Netty | 第2章 Netty 简介《Netty In Ac

    前言 参考资料: 《Netty In Action》; 本系列为 Netty 学习笔记,本篇介绍总结Netty 简...

  • 提升能力从学习Netty开始

    netty 介绍 一、 Netty 是什么 Netty 是一个广泛使用的 Java 网络编程框架而Netty就是基...

  • 什么是netty--通俗易懂

    一.Netty介绍 1.什么是netty Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty...

  • Netty基础

    网络编程框架Netty的介绍与使用 一、简介 Netty的官网https://netty.io/ Netty是一个...

  • 1.Netty入门

    Netty入门 1.Netty介绍 (1)百度百科介绍: Netty是由JBOSS提供的一个java开源框架。Ne...

  • dubbo源码6-transporter-netty4

    transporter层支持netty,mina,http等协议。本文介绍基于netty4的实现。 一 Netty...

  • netty介绍

    概念 Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,...

  • Netty介绍

网友评论

      本文标题:netty介绍

      本文链接:https://www.haomeiwen.com/subject/nzobnftx.html