如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Java网络编程(5)作者:刘晓华发文时间:2004.11.22使用JavaNIO提高服务端程序的性能在前面的章节里,我们讨论了JavaNIO的基本概念,在这一节里,我们将结合具体的JavaSocket编程,讨论使用NIO提高服务端程序的性能的问题。JavaNIO增加了新的SocketChannel、ServerSocketChannel等类来提供对构建高性能的服务端程序的支持。SocketChannel、ServerSocketChannel能够在非阻塞的模式下工作,它们都是selectable的类。在构建服务器或者中间件时,推荐使用JavaNIO。在传统的网络编程中,我们通常使用一个专用线程(Thread)来处理一个Socket连接,通过使用NIO,一个或者很少几个Socket线程就可以处理成千上万个活动的Socket连接。通常情况下,通过ServerSocketChannel.open()获得一个ServerSocketChannel的实例,通过SocketChannel.open或者serverSocketChannel.accept()获得一个SocketChannel实例。要使ServerSocketChannel或者SocketChannel在非阻塞的模式下操作,可以调用serverSocketChannel.configureBlocking(false);或者socketChannel.configureBlocking(false);语句来达到目的。通常情况下,服务端可以使用非阻塞的ServerSocketChannel,这样,服务端的程序就可以更容易地同时处理多个socket线程。下面我们来看一个综合例子,这个例子使用了ServerSocketChannel、SocketChannel开发了一个非阻塞的、能处理多线程的Echo服务端程序,见示例12-14。【程序源代码】1//====================ProgramDiscription=====================2//程序名称:示例12-14:SocketChannelDemo.java3//程序目的:学习JavaNIO#SocketChannel4//==============================================================567importjava.nio.ByteBuffer;8importjava.nio.channels.ServerSocketChannel;9importjava.nio.channels.SocketChannel;10importjava.nio.channels.Selector;11importjava.nio.channels.SelectionKey;12importjava.nio.channels.SelectableChannel;1314importjava.net.Socket;15importjava.net.ServerSocket;16importjava.net.InetSocketAddress;17importjava.util.Iterator;1819publicclassSocketChannelDemo2021{22publicstaticintPORT_NUMBER=23;//监听端口23ServerSocketChannelserverChannel;24ServerSocketserverSocket;25Selectorselector;26privateByteBufferbuffer=ByteBuffer.allocateDirect(1024);2728publicstaticvoidmain(String[]args)29throwsException30{31SocketChannelDemoserver=newSocketChannelDemo();32server.init(args);33server.startWork();34}353637publicvoidinit(String[]argv)throwsException38{39intport=PORT_NUMBER;4041if(argv.length>0){42port=Integer.parseInt(argv[0]);43}4445System.out.println("List