最近在學習netty,netty是一個NIO client-server(客服端服務器)框架,使用netty能夠快速開發網絡應用,例如服務器和客服端協議。netty提供了一種新的方式來開發網絡應用程序,這種新的方式使得它很容易使用和有很強的擴展性。netty的內部實現很複雜的,單netty提供了簡單易用的api從網絡處理代碼中解耦業務邏輯。netty是徹底基於NIO實現的,因此整個netty都是異步的。
java
回調是異步處理的一種技術。一個回調是被傳遞到而且執行完該方法。最先出如今JavaScript中,回調是JavaScript的核心,同時在netty中大量使用。api
下面用代碼實現一個簡單的回調,實現如何使用這種技術來獲取數據服務器
首先是一個回調接口,提供了獲取數據和處理異常兩個方法網絡
public interface FetcherCallback { void onData(Data data) throws Exception; void onError(Throwable cause); }
而後是一個提取數據的接口,提供獲取數據的方法
框架
public interface Fetcher { void fetchData(FetcherCallback callback); }
具體實現
異步
public class MyFetcher implements Fetcher { private Data data; public MyFetcher(Data data) { this.data = data; } @Override public void fetchData(FetcherCallback callback) { try { callback.onData(data); } catch (Exception e) { callback.onError(e); } } }
public class Data { @Override public String toString() { int r = n / m; return n + " / " + m + " = " + r; } private int m; private int n; public Data(int m, int n) { super(); this.m = m; this.n = n; } public int getM() { return m; } public void setM(int m) { this.m = m; } public int getN() { return n; } public void setN(int n) { this.n = n; } }
下面來測試一下ide
public class Worker { public void doWork(Data data) { Fetcher fetcher = new MyFetcher(data); fetcher.fetchData(new FetcherCallback() { @Override public void onError(Throwable cause) { System.err.println("an error accour:" + cause.getMessage()); } @Override public void onData(Data data) throws Exception { System.out.println("Data received:" + data); } }); } public static void main(String[] args) { new Worker().doWork(new Data(0, 2)); new Worker().doWork(new Data(1, 2)); } }
運行輸出結果
學習