Java网络编程 (5).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Java网络编程 (5).doc》由会员分享,可在线阅读,更多相关《Java网络编程 (5).doc(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java网络编程 (5) 作者:刘晓华 发文时间:2004.11.22使用Java NIO提高服务端程序的性能 在前面的章节里,我们讨论了Java NIO的基本概念,在这一节里,我们将结合具体的Java Socket编程,讨论使用NIO提高服务端程序的性能的问题。 Java NIO增加了新的SocketChannel、ServerSocketChannel等类来提供对构建高性能的服务端程序的支持。SocketChannel、ServerSocketChannel能够在非阻塞的模式下工作,它们都是selectable的类。在构建服务器或者中间件时,推荐使用Java NIO。 在传统的网络编程中,
2、我们通常使用一个专用线程(Thread)来处理一个Socket连接,通过使用NIO,一个或者很少几个Socket线程就可以处理成千上万个活动的Socket连接。 通常情况下,通过ServerSocketChannel.open()获得一个ServerSocketChannel的实例,通过SocketChannel.open或者serverSocketChannel.accept()获得一个SocketChannel实例。要使ServerSocketChannel或者SocketChannel在非阻塞的模式下操作,可以调用serverSocketChannel.configureBlocking
3、 (false);或者socketChannel.configureBlocking (false); 语句来达到目的。通常情况下,服务端可以使用非阻塞的ServerSocketChannel,这样,服务端的程序就可以更容易地同时处理多个socket线程。 下面我们来看一个综合例子,这个例子使用了ServerSocketChannel、SocketChannel开发了一个非阻塞的、能处理多线程的Echo服务端程序,见示例12-14。【程序源代码】 1/ = Program Discription =2/ 程序名称:示例12-14 : SocketChannelDemo.java3/ 程序目的:
4、学习Java NIO#SocketChannel4/ =567import java.nio.ByteBuffer;8import java.nio.channels.ServerSocketChannel;9import java.nio.channels.SocketChannel;10import java.nio.channels.Selector;11import java.nio.channels.SelectionKey;12import java.nio.channels.SelectableChannel;1314import .Socket;15import .Server
5、Socket;16import .InetSocketAddress;17import java.util.Iterator;1819public class SocketChannelDemo 202122public static int PORT_NUMBER = 23;/监听端口23ServerSocketChannel serverChannel;24ServerSocket serverSocket ;25Selector selector ;26private ByteBuffer buffer = ByteBuffer.allocateDirect (1024);2728pub
6、lic static void main (String args)29throws Exception3031SocketChannelDemo server=new SocketChannelDemo();32server.init(args);33server.startWork();34353637public void init (String argv)throws Exception3839int port = PORT_NUMBER;4041if (argv.length 0) 42port = Integer.parseInt (argv 0);434445System.ou
7、t.println (Listening on port + port);4647/ 分配一个ServerSocketChannel48serverChannel = ServerSocketChannel.open();49/ 从ServerSocketChannel里获得一个对应的Socket50serverSocket = serverChannel.socket();51/ 生成一个Selector52selector = Selector.open();5354/ 把Socket绑定到端口上55serverSocket.bind (new InetSocketAddress (por
8、t);56/serverChannel为非bolck57serverChannel.configureBlocking (false);5859/ 通过Selector注册ServerSocetChannel60serverChannel.register (selector, SelectionKey.OP_ACCEPT);61626364 public void startWork()throws Exception 6566 67 while (true) 6869int n = selector.select();/获得IO准备就绪的channel数量7071if (n = 0) 72
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java网络编程 5 Java 网络 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内