无论是JDK里的HttpURLConnection,还是Apache hc里的ManagedHttpClientConnection,其本质,都是对Socket的持有和围绕着Socket所进行的操作,这是理解它们源码的一根提纲携领的线。
我们常说的“打开连接”,其本质是如下动作:
- 创建一个Socket
- 设置Socket的各种属性
- 绑定Socket到本地地址(可选,socket.bind)
- 连接Socket到远端地址(socket.connect)
在“打开连接”里,如果是HTTPS连接,还需要额外的如下动作:
- sslSocket = SSLSocketFactory.createSocket(Socket, ...)
- 设置sslSocket的各类属性
- 执行SSL/TSL握手,sslSocket.startHandshake()
- 验证Host Name的合法性
“关闭链接”,其本质是就是关闭Socket.
上述的“打开连接”的操作,在Apache hc里都封装到了HttpClientConnectionOperator和ConnectionSocketFactory里。