JDK1.4非阻塞套接字API概述 - 编程入门网
新的套接字。SocketChannel类被定义在java.nio.channel包中。
选择器是一个Selector类的对象。该类的每个实例均能监视更多的套接字通道,进而建立更多的连接。当一些有意义的事发生在通道上(如客户端试图连接服务器端或进行读/写操作),选择器便会通知应用程序处理请求。选择器会创建一个关键字,这个关键字是SelectionKey类的一个实例。每个关键字都保存着应用程序的标识及请求的类型。其中,请求的类型可以是如下之一: ●尝试连接(客户端) ●尝试连接(服务器端) ●读取操作 ●写入操作 一个通用的实现非阻隔服务器的算法如下:
基本上,服务器端的实现是由选择器等待事件和创建关键字的无限循环组成的。根据关键字的类型,及时的执行操作。关键字存在以下4种可能的类型。 Acceptable: 相应的客户端要求连接。 Connectable:服务器端接受连接。 Readable:服务器端可读。 Writeable:服务器端可写。 JDK1.4非阻塞套接字API概述(4)时间:2010-12-10通常一个表示接受的关键字创建在服务器端。事实上,这种关键字仅仅通知一下服务器端客户端请求连接。在这种环境下,正如你通过算法得到的结论一样,服务器端个性化套接字通道和连接这个通道到选择器以便进行读/写操作。从这一刻起,当接受客户端读或写操作时,选择器将为客户端创建Readable或Writeable关键字。从而,服务器端将截取这些关键字并执行正确的动作。 现在,你可以用下面这个推荐算法和Java语言写服务器端了。用这种方法能成功的创建套接字通道,选择器,和套接字-选择器注册(socket-selector registration)。
这个静态(static)open类方法创建了一个SocketChannel类的实例。configureBlocking(false)调用设置通道为非阻隔。通过bind方法建立到服务器端的连接。字符串“host”代表服务器的IP地址,8000是通信套接字。你可以调用你可以调用Selector类的静态(static)open方法创建选择器。最后,register方法用来连接选择器和套接字通道。 第二个参数代表注册的类型。在这个例子中,我们使用OP_ACCEPT,意思是选择器仅能报告客户端试图尝试连接服务器端。其他可能的选项是:OP_CONNECT,在客户端下使用;OP_READ; 和OP_WRITE 用Java语言描述的无限for循环的代码如下:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |