java解读nio socket非阻塞模式

java解读nio socket非阻塞模式

ID:11803502

大小:47.50 KB

页数:10页

时间:2018-07-14

java解读nio socket非阻塞模式_第1页
java解读nio socket非阻塞模式_第2页
java解读nio socket非阻塞模式_第3页
java解读nio socket非阻塞模式_第4页
java解读nio socket非阻塞模式_第5页
资源描述:

《java解读nio socket非阻塞模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、java解读NIOSocket非阻塞模式.txt“我羡慕内些老人羡慕他们手牵手一直走到最后。━交话费的时候,才发现自己的话那么值钱。java解读NIOSocket非阻塞模式(转载)2010年05月20日星期四16:27前言:jdk供的无阻塞I/O(NIO)有效解决了多线程服务器存在的线程开销问题,但在使用上略显得复杂一些。在NIO中使用多线程,主要目的已不是为了应对每个客户端请求而分配独立的服务线程,而是通过多线程充分使用用多个CPU的处理能力和处理中的等待时间,达到提高服务能力的目的。这段时间在研究NIO,写篇博客来记住学过的东西。还是从最简单的HelloWorld开始,client多线程请

2、求server端,server接收client的名字,并返回Hello!+名字的字符格式给client。当然实际应用并不这么简单,实际可能是访问文件或者数据库获取信息返回给client。非阻塞的NIO有何神秘之处?代码:1)server端代码Java代码/****@authorJeff**/publicclassHelloWorldServer{staticintBLOCK=1024;staticStringname="";protectedSelectorselector;protectedByteBufferclientBuffer=ByteBuffer.allocate(BLOCK);p

3、rotectedCharsetDecoderdecoder;staticCharsetEncoderencoder=Charset.forName("GB2312").newEncoder();publicHelloWorldServer(intport)throwsIOException{selector=this.getSelector(port);Charsetcharset=Charset.forName("GB2312");decoder=charset.newDecoder();}//获取SelectorprotectedSelectorgetSelector(intport)th

4、rowsIOException{ServerSocketChannelserver=ServerSocketChannel.open();Selectorsel=Selector.open();server.socket().bind(newInetSocketAddress(port));server.configureBlocking(false);server.register(sel,SelectionKey.OP_ACCEPT);returnsel;}//监听端口publicvoidlisten(){try{for(;;){selector.select();Iteratoriter

5、=selector.selectedKeys().iterator();while(iter.hasNext()){SelectionKeykey=(SelectionKey)iter.next();iter.remove();process(key);}}}catch(IOExceptione){e.printStackTrace();}}//处理事件protectedvoidprocess(SelectionKeykey)throwsIOException{if(key.isAcceptable()){//接收请求ServerSocketChannelserver=(ServerSocke

6、tChannel)key.channel();SocketChannelchannel=server.accept();//设置非阻塞模式channel.configureBlocking(false);channel.register(selector,SelectionKey.OP_READ);}elseif(key.isReadable()){//读信息SocketChannelchannel=(SocketChannel)key.channel();intcount=channel.read(clientBuffer);if(count>0){clientBuffer.flip();C

7、harBuffercharBuffer=decoder.decode(clientBuffer);name=charBuffer.toString();//System.out.println(name);SelectionKeysKey=channel.register(selector,SelectionKey.OP_WRITE);sKey.attach(name);}else{channel

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

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

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