- Java核心技術·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 550字
- 2020-10-30 18:10:56
4.2.2 為多個客戶端服務
前面例子中的簡單服務器存在一個問題。假設我們希望有多個客戶端同時連接到我們的服務器上。通常,服務器總是不間斷地運行在服務器計算機上,來自整個因特網的用戶希望同時使用服務器。前面的簡單服務器會拒絕多客戶端連接,使得某個用戶可能會因長時間地連接服務而獨占服務,其實我們可以運用線程的魔力把這個問題解決得更好。
每當程序建立一個新的套接字連接,也就是說當調用accept()時,將會啟動一個新的線程來處理服務器和該客戶端之間的連接,而主程序將立即返回并等待下一個連接。為了實現這種機制,服務器應該具有類似以下代碼的循環操作:

ThreadedEchoHandler類實現了Runnable接口,而且在它的run方法中包含了與客戶端循環通信的代碼。

由于每一個連接都會啟動一個新的線程,因而多個客戶端就可以同時連接到服務器了。對此可以做個簡單的測試:
1)編譯和運行服務器程序(程序清單4-4)。
2)如圖4-5打開數個telnet窗口。
3)在這些窗口之間切換,并鍵入命令。注意你可以同時通過這些窗口進行通信。
4)當完成之后,切換到你啟動服務器程序的窗口,并使用CTRL+C強行關閉它。

圖4-5 多個同時通信的telnet窗口
注意:在這個程序中,我們為每個連接生成一個單獨的線程。這種方法并不能滿足高性能服務器的要求。為使服務器實現更高的吞吐量,你可以使用java.nio包中一些特性。詳情請參見以下鏈接:http://www.ibm.com/developerworks/java/library/j-javaio。
程序清單4-4 threaded/ThreadedEchoServer.java



推薦閱讀
- Monkey Game Development:Beginner's Guide
- 微服務與事件驅動架構
- Vue.js快速入門與深入實戰
- PyTorch自然語言處理入門與實戰
- Production Ready OpenStack:Recipes for Successful Environments
- Spring實戰(第5版)
- 小學生C++創意編程(視頻教學版)
- Web Development with MongoDB and Node(Third Edition)
- HTML5與CSS3基礎教程(第8版)
- ExtJS高級程序設計
- 計算機應用基礎案例教程
- Android驅動開發權威指南
- 30天學通C#項目案例開發
- Python預測之美:數據分析與算法實戰(雙色)
- 從零開始構建深度前饋神經網絡:Python+TensorFlow 2.x