底层协议数据库连接的典型地是基于TCP/IP。可以通过以下几种方式之一终止连接:
- 服务器正常关闭并收到来自客户端的确认;
- 客户端关闭正常,并收到来自服务器的确认;
- 连接超时。客户端和服务器分别由各自的操作系统告知连接已关闭;
- 连接被任何一方强制关闭。
在(3)的情况下,TCP连接必须通过每隔一段时间发送一次虚拟消息来保持活动状态以避免超时。你的连接可能会超时,因为任何一方都不这样做(对于数据库连接,这通常不是你通常想要做的事情)。
一方有时间认为连接已关闭,而另一方仍然认为连接已打开,这是完全可能的。消息可能会在这些情况下发送(通常会丢弃)。
每个连接(“套接字”)使用操作系统资源,称为文件描述符(用UNIX的说法,您的操作系统可能会调用它),它是I/O资源的句柄和相同的东西用于打开文件(同样,操作系统可能会有所不同)。
上的数据库连接上的限制将是最低的:对于OS
- 配置的限制;
- 该进程允许的最大文件描述符(减去任何用于I/O活动的文件描述符);和
- (可能)有关连接限制的系统设置或策略。
如果连接不是基于TCP的(例如文件系统套接字,就像UNIX系统中经常与MySQL一起使用的文件系统套接字),原理实际上非常类似。
无论如何,故事的寓意在于数据库连接 - 无论其形式如何 - 都涉及某种操作系统资源。您的程序hsa直接或间接要求提供该资源。如果程序死亡,操作系统将回收它(可能不是立即但最终)。如果连接被垃圾收集,那么资源将以与被强制关闭相同的方式被释放。
它的外部资源(而不是客户端使用的代码)将持续打开并驱动任何限制。