官术网_书友最值得收藏!

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

主站蜘蛛池模板: 大港区| 慈利县| 龙游县| 拉孜县| 宁安市| 奉新县| 揭西县| 吴忠市| 南召县| 怀化市| 青铜峡市| 福海县| 定州市| 田东县| 博白县| 嘉兴市| 潮州市| 鹤壁市| 崇义县| 建宁县| 民县| 汝南县| 云和县| 宣武区| 绵竹市| 扶余县| 曲麻莱县| 灵武市| 南乐县| 克什克腾旗| 枞阳县| 广州市| 松桃| 汶上县| 弥勒县| 繁峙县| 无为县| 巴南区| 邢台市| 玛沁县| 锡林郭勒盟|