Reactor模式和NIO

Reactor模式和NIO

ID:42576616

大小:214.27 KB

页数:7页

时间:2019-09-18

Reactor模式和NIO_第1页
Reactor模式和NIO_第2页
Reactor模式和NIO_第3页
Reactor模式和NIO_第4页
Reactor模式和NIO_第5页
资源描述:

《Reactor模式和NIO》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、当前分布式计算 WebServices盛行天下,这些网络服务的底层都离不开对socket的操作。他们都有一个共同的结构:1.Readrequest2.Decoderequest3.Processservice4.Encodereply5.Sendreply经典的网络服务的设计如下图,在每个线程中完成对数据的处理:但这种模式在用户负载增加时,性能将下降非常的快。我们需要重新寻找一个新的方案,保持数据处理的流畅,很显然,事件触发机制是最好的解决办法,当有事件发生时,会触动handler,然后开始数据的处理。Reactor模式类似于AWT中的Event处理:Reactor

2、模式参与者1.Reactor负责响应IO事件,一旦发生,广播发送给相应的Handler去处理,这类似于AWT的thread2.Handler是负责非堵塞行为,类似于AWTActionListeners;同时负责将handlers与event事件绑定,类似于AWTaddActionListener如图:Java的NIO为reactor模式提供了实现的基础机制,它的Selector当发现某个channel有数据时,会通过SlectorKey来告知我们,在此我们实现事件和handler的绑定。我们来看看Reactor模式代码:Java代码1.publicclassReac

3、torimplementsRunnable{2.3.  finalSelectorselector;4.  finalServerSocketChannelserverSocket;5.6.  Reactor(intport)throwsIOException{7.    selector=Selector.open();8.    serverSocket=ServerSocketChannel.open();9.    InetSocketAddressaddress=newInetSocketAddress(InetAddress.getLocalHost()

4、,port);10.    serverSocket.socket().bind(address);11.12.    serverSocket.configureBlocking(false);13.    //向selector注册该channel14.    SelectionKeysk=serverSocket.register(selector,SelectionKey.OP_ACCEPT);15.16.    logger.debug("-->StartserverSocket.register!");17.18.    //利用sk的attache功能

5、绑定Acceptor如果有事情,触发Acceptor19.    sk.attach(newAcceptor());20.    logger.debug("-->attach(newAcceptor()!");21.  }22.23.24.  publicvoidrun(){//normallyinanewThread25.    try{26.    while(!Thread.interrupted())27.    {28.      selector.select();29.      Setselected=selector.selectedKeys()

6、;1.      Iteratorit=selected.iterator();2.      //Selector如果发现channel有OP_ACCEPT或READ事件发生,下列遍历就会进行。3.      while(it.hasNext())4.        //来一个事件第一次触发一个accepter线程5.        //以后触发SocketReadHandler6.        dispatch((SelectionKey)(it.next()));7.        selected.clear();8.      }9.    }catch

7、(IOExceptionex){10.        logger.debug("reactorstop!"+ex);11.    }12.  }13.14.  //运行Acceptor或SocketReadHandler15.  voiddispatch(SelectionKeyk){16.    Runnabler=(Runnable)(k.attachment());17.    if(r!=null){18.      //r.run();19.20.    }21.  }22.23.  classAcceptorimplementsRunnable{/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。