天天看點

JVM的ServerSocket是怎麼實作的(上)

概況

JDK 為我們提供了 ServerSocket 類作為服務端套接字的實作,通過它可以讓主機監聽某個端口而接收其他端的請求,處理完後還可以對請求端做出響應。它的内部真正實作是通過 SocketImpl 類來實作的,它提供了工廠模式,是以如果自己想要其他的實作也可以通過工廠模式來改變的。

繼承結構

--java.lang.Object
  --java.net.ServerSocket
           

相關類圖

前面說到 ServerSocket 類真正的實作是通過 SocketImpl 類,于是可以看到它使用了 SocketImpl 類,但由于 windows 和 unix-like 系統有差異,而 windows 不同的版本也需要做不同的處理,是以兩類系統的類不盡相同。

下圖是 windows 的類圖關系, SocketImpl 類實作了 SocketOptions 接口,接着還派生出了一系列的子類,其中 AbstractPlainSocketImpl 是原始套接字的實作的一些抽象,而 PlainSocketImpl 類是一個代理類,由它代理 TwoStacksPlainSocketImpl 和 DualStackPlainSocketImpl 兩種不同實作。存在兩種實作的原因是一個用于處理 Windows Vista 以下的版本,另一個用于處理 Windows Vista 及以上的版本。