1

JDBC驱动程序连接池中的每个连接是否在客户端打开相同的套接字端口以连接到数据库服务器?如果是这样,那就意味着多个线程同时访问同一个端口,对吧?提前致谢。

4

3 回答 3

4

这不是真的。从根本上说,客户端套接字的实例将只使用一个端口,并且不共享。从这篇文章中

每个请求的客户端套接字都分配有一个唯一的端口号,而服务器端口号始终相同。如果这些数字中的任何一个不同,则套接字不同

因此,要回答您的问题,每个 JDBC 连接都使用不同的客户端套接字连接到服务器。

于 2013-09-06T08:58:25.297 回答
1

JDBC驱动程序连接池中的每个连接是否在客户端打开相同的套接字端口以连接到数据库服务器?

不,这是不可能的。

如果是这种情况

它不是。

这意味着多个线程同时访问同一个端口,对吗?

错了,无论如何它都没有任何意义,因为连接是不同的。

你的问题没有任何意义。你要解决的真正问题是什么?

于 2013-09-06T08:56:14.220 回答
0

首先,您要询问的是不存在这种普遍性的一般行为。由特定驱动程序决定如何设置。它甚至根本不需要创建网络套接字。

其次,您可以在不考虑 JDBC 而只考虑网络的情况下回答有关端口共享的问题。第二次打开端口是不可能的。这没有任何意义,因为端口是区分同一台机器上的客户端(数据包的接收者)的方式同一个 JDBC 中的两个实例可以共享一个端口,但不能再次打开一个端口。共享一个端口需要实现另一个协议来识别每个数据包的关联连接。但这正是端口的用途。

第三,多个线程是否同时访问同一个端口同样取决于特定的驱动程序,因为它是驱动程序决定是否使用多个线程。没有人说访问 JDBC 连接的线程必须与访问网络端口的线程相同(以防驱动程序使用网络连接)。

于 2013-09-06T08:57:25.310 回答