NETTY的特性總結(jié)
分類 | 特性 |
---|---|
設(shè)計(jì) | 統(tǒng)一的API,支持多種傳輸類型翰灾,阻塞和非阻塞的 簡(jiǎn)單而強(qiáng)大的線程模型 真正的無(wú)連接數(shù)據(jù)報(bào)套接字支持 鏈接邏輯組件以支持復(fù)用 |
易于使用 | 詳實(shí)的Javadoc和大量實(shí)例集 不需要超過(guò)JDK1.6+的支持 |
性能 | 擁有比Java核心API更高的吞吐量以及更低的延遲 得益于池化和復(fù)用,擁有更低的資源消耗 最小的內(nèi)存復(fù)用 |
健壯性 | 不會(huì)因?yàn)槁俅缥濉⒖焖倩蛘叱d的連接而導(dǎo)致OutOfMemoryError 消除在高速網(wǎng)絡(luò)中NIO應(yīng)用程序常見(jiàn)的不公平讀/寫(xiě)比率 |
安全性 | 完整的SSL/TLS以及StartTLS的支持 可用于受限環(huán)境下啡专,如Applet和OSGI |
社區(qū)驅(qū)動(dòng) | 發(fā)布快速而頻繁 |
NETTY的核心組件
1冲杀、Channel
2怜俐、回調(diào)
3身堡、Future
4、事件和ChannelHandler
回調(diào)
回調(diào)可以用一個(gè)簡(jiǎn)單的例子來(lái)解釋
1拍鲤、Class A實(shí)現(xiàn)了接口CallBack callback
2贴谎、 Class A中包含了一個(gè)Class B的引用b
3、Class B中有一個(gè)參數(shù)為CallBack類型的方法f(CallBack callback)
4季稳、A的對(duì)象a調(diào)用B的對(duì)象b中的方法f(CallBack callback)
5擅这、然后b就可以在f(CallBack callback)方法中調(diào)用A的方法
詳細(xì)的例程見(jiàn)下面
#######回調(diào)接口
public interface Callback {
/**
* 回調(diào)接口
*/
public void solve(String result);
}
#######接口實(shí)現(xiàn)類
public class HandlerA implements Callback {
private HandlerB b;
public HandlerA(HandlerB b){
this.b = b;
}
/**
* 實(shí)現(xiàn)的方法
*/
@Override
public void solve(String result) {
System.out.println("最終得到的結(jié)果為--->" + result);
}
/**
* 向HandleB的對(duì)象提出問(wèn)題,這是一個(gè)新線程
* @param question
*/
public void askQuestion(final String question){
new Thread(new Runnable() {
@Override
public void run() {
try {
b.executeMessage(HandlerA.this, question);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
play();
}
public void play(){
System.out.println("在B處理問(wèn)題的同時(shí)做其它事");
}
}
#######接口方法的處理類
public class HandlerB {
public String name;
public HandlerB(String name){
this.name = name;
}
/**
* 被處理回調(diào)函數(shù)的方法
* @param callback
* @param question
* @return
* @throws InterruptedException
*/
public void executeMessage(Callback callback,String question) throws InterruptedException{
System.out.println("小王的問(wèn)題--->" + question);
//處理問(wèn)題花費(fèi)的時(shí)間
Thread.sleep(10000);
String result = "答案是2";
callback.solve(result);
}
}
#######測(cè)試類
public class TestMethod {
/**
* @param args
*/
public static void main(String[] args) {
HandlerB b = new HandlerB("Jack");
HandlerA a = new HandlerA(b);
a.askQuestion("1 + 1 = ?");
}
}
運(yùn)行這個(gè)程序,就可以得到我們想要的結(jié)果绞幌,即A向B提出了一個(gè)問(wèn)題,等待B給出解答一忱,但是與此同時(shí)A去做其它事情莲蜘,當(dāng)B完成這個(gè)問(wèn)題的時(shí)候,給出A答案帘营,這樣的一個(gè)過(guò)程就是回調(diào)的過(guò)程