Java 非阻塞套接字(Nonblocking Sockets) 概述
Giuseppe Naccarato 著
非阻塞套接字()自 版引入,它允许网络通信在应
用程序和没有阻塞的进程中使用套接字。在这篇文章中,将详细介绍什么是
,怎样工作及其用途。
由于 的面世,从 起,程序员便能用一组新的 来进行 操作。自
年一月的 版,程序员便可以使用 了。在 中用一些
最重要的新特征来处理诸如在文件和套接字上高性能的读写操作,正规表达式,译码编
码字符集,内存映射和文件锁定。在这篇文章中,我们将讨论一个特殊的新概念――
!。
非阻塞套接字允许在通道上做输入输出操作而不用阻塞使用该通道的进程。我正在讨论异
步的高性能的读写操作,同样,你将看到,翻转上下设计和开发基于接口的应用程序技巧。
开发者也许会问,为什么介绍一种新的技术来处理套接字?"# 的套接字又有
哪些问题?假设实现服务器端接受不同的客户端的连接;同样,假设客户端能支持处理同
步的多请求;那么,使用 "#开发这样的服务器端有两种不同的选择:
$实现多线程服务为每个连接用户处理线程。
$使用外部第三方模块。
这两种方法都可以实现,但是如果适用第一种方法――整个线程管理方案,包括相关并发
性和冲突问题――都需要靠程序员来处理。第二个方案也许花费更大,且使应用程序依靠
“-%&'的外部模块。依靠非阻塞套接字,你能实现非阻塞的服务无需直接管理线程或
者采用外部模块。
Buer
在我们考虑非阻塞套接字以前,不得不花费一些字句在一个新的 的类:
()*+, 上。一个 )*+, 实例只是原始数据的一个有限的容器。称其有限是因为
它只能包含有限数量的字节;换句话说,它不是一个像 -, 或是 ,,./ 一样的容器,
后两者从理论上说是没有限度的。另外,一个 )*+, 实例仅能包含属于 的基本数据
类型。例如:0,1*)等等。
)*+, 类是一个抽象类,它有 2 个子类分别对应于七种基本的数据类型:
$).)*+,
$30,)*+,
$%*)*+,
$4)*+,
$)*+,
$/)*+,
$0,)*+,