從 BIO、NIO 到 Netty【前置知識點】

飛天小牛肉發表於2020-12-21

? 關於 I/O 模型、同步/非同步、阻塞/非阻塞等的相關詳細解釋,大家可以去看 ? 本倉庫中 Java基礎 部分的 【底層:Linux 五種 I/O 模型詳解】

1. BIO

① 傳統的阻塞式通訊流程

早期的 Java 網路相關的 API(java.net包) 使用 Socket(套接字)進行網路通訊,不過只支援阻塞函式使用。

要通過網際網路進行通訊,至少需要一對套接字:

  1. 執行於伺服器端的 Server Socket。
  2. 執行於客戶機端的 Client Socket

Socket 網路通訊過程簡單來說分為下面 4 步:

  1. 建立服務端並且監聽客戶端請求
  2. 客戶端請求,服務端和客戶端建立連線
  3. 兩端之間可以傳遞資料
  4. 關閉資源

對應到服務端和客戶端的話,是下面這樣的。

伺服器端:

  1. 建立 ServerSocket 物件並且繫結地址(ip)和埠號(port):server.bind(new InetSocketAddress(host, port))
  2. 通過 accept()方法監聽客戶端請求
  3. 連線建立後,通過輸入流讀取客戶端傳送的請求資訊
  4. 通過輸出流向客戶端傳送響應資訊
  5. 關閉相關資源

客戶端:

相關文章