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,所以被稱為“偽異步”,下面章節我們就對偽異步代碼進行分析,看看偽異步是否能夠滿足我們對高性能、高并發接入的訴求。