Netty权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人


2.1.3 同步阻塞式I/O创建的TimeClient源码分析

客户端通过Socket创建,发送查询时间服务器的"QUERY TIME ORDER"指令,然后读取服务端的响应并将结果打印出来,随后关闭连接,释放资源,程序退出执行。

代码清单2-3 同步阻塞I/O的TimeClient

第35行客户端通过PrintWriter向服务端发送"QUERY TIME ORDER"指令,然后通过BufferedReader的readLine读取响应并打印。

分别执行服务端和客户端,执行结果如下。

服务端执行结果如图2-3所示。

图2-3 同步阻塞I/O时间服务器服务端运行结果

客户端执行结果如图2-4所示。

图2-4 同步阻塞IO时间服务器客户端运行结果

到此为止,同步阻塞式I/O开发的时间服务器程序已经讲解完毕,我们发现,BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接。在高性能服务器应用领域,往往需要面向成千上万个客户端的并发连接,这种模型显然无法满足高性能、高并发接入的场景。

为了改进一线程一连接模型,后来又演进出了一种通过线程池或者消息队列实现1个或者多个线程处理N个客户端的模型,由于它的底层通信机制依然使用同步阻塞I/O,所以被称为“伪异步”,下面章节我们就对伪异步代码进行分析,看看伪异步是否能够满足我们对高性能、高并发接入的诉求。