I/O事件驅(qū)動模型。
類似與AWT的Event處理,當(dāng)點擊某個鍵時才會觸發(fā)我們的回掉函數(shù)。
1.Reactor負(fù)責(zé)相應(yīng)I/O事件,一旦發(fā)送,交給相應(yīng)的handler去處理。
2.handler負(fù)責(zé)非阻塞行為,同時負(fù)責(zé)處理函數(shù)與監(jiān)聽事件的綁定。
IN JAVA
JAVA NIO為Reactor提供了基礎(chǔ)的機(jī)制,在Selector中注冊I/O事件,通過select()查詢是否有我們注冊的channel中是否有我們關(guān)注的事情發(fā)生,當(dāng)select()后,可以通過selectedKeys()方法,獲取到發(fā)生事件的selectkeys。
核心代碼
設(shè)置事件和handler綁定;
//設(shè)置不阻塞
serverSocket.configuteBlocking(false);
//注冊關(guān)注的事件到selector
serverSocket.register(selector,SelectionKey.OP_ACCPET);
//輪詢
while(true)
{
int readys = selector.selector();
if(readys == 0) continue;
//分發(fā)事件并處理他
dispatch( selector.selectedKeys());
}
void dispatch(Set<SelectionKey>)
{
Iterator it = selected.iterator();
while(it.hasNext())
{
SelectionKey key = it.next();
//分發(fā)處理Key
......
}
}