底層協議數據庫連接的典型地是基於TCP/IP。可以通過以下幾種方式之一終止連接:
- 服務器正常關閉並收到來自客戶端的確認;
- 客戶端關閉正常,並收到來自服務器的確認;
- 連接超時。客戶端和服務器分別由各自的操作系統告知連接已關閉;
- 連接被任何一方強制關閉。
在(3)的情況下,TCP連接必須通過每隔一段時間發送一次虛擬消息來保持活動狀態以避免超時。你的連接可能會超時,因爲任何一方都不這樣做(對於數據庫連接,這通常不是你通常想要做的事情)。
一方有時間認爲連接已關閉,而另一方仍然認爲連接已打開,這是完全可能的。消息可能會在這些情況下發送(通常會丟棄)。
每個連接(「套接字」)使用操作系統資源,稱爲文件描述符(用UNIX的說法,您的操作系統可能會調用它),它是I/O資源的句柄和相同的東西用於打開文件(同樣,操作系統可能會有所不同)。
上的數據庫連接上的限制將是最低的:對於OS
- 配置的限制;
- 該進程允許的最大文件描述符(減去任何用於I/O活動的文件描述符);和
- (可能)有關連接限制的系統設置或策略。
如果連接不是基於TCP的(例如文件系統套接字,就像UNIX系統中經常與MySQL一起使用的文件系統套接字),原理實際上非常類似。
無論如何,故事的寓意在於數據庫連接 - 無論其形式如何 - 都涉及某種操作系統資源。您的程序hsa直接或間接要求提供該資源。如果程序死亡,操作系統將回收它(可能不是立即但最終)。如果連接被垃圾收集,那麼資源將以與被強制關閉相同的方式被釋放。
它的外部資源(而不是客戶端使用的代碼)將持續打開並驅動任何限制。