最近在学习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)); } }
运行输出结果
学习