连接池中的每个连接是否使用相同的套接字端口?

时间:2013-09-06 08:45:34

标签: java

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

3 个答案:

答案 0 :(得分:3)

那不是真的。从根本上说,客户端套接字的实例将只使用一个端口,而不是共享端口。 From this article

  

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

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

答案 1 :(得分:1)

  

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

没有。这是不可能的。

  

如果是这种情况

不是。

  

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

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

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

答案 2 :(得分:0)

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

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

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