mysql 的每一个 connection 底层都是一个 socket 连接对吗?(别说 socket 是抽象接口,这里就把它的实现称为 socket ) 服务端每次接收到客户端请求时都会生成一个新的 socket ,新的 socket 中有服务器 ip 、服务器端口号、客户端 ip 、客户端端口号,以此来表明这是某个客户端与服务端的连接。 那么连接池中的 socket 是什么样的?是有多个服务器 ip 、服务器端口号一样,客户端 ip 、客户端端口号都为空的 socket 对象吗?然后每次有新的客户端请求进来,就拿出一个 socket 对象,把它的客户端 ip 、客户端端口号置为这个请求的,用完以后再把客户端 ip 、客户端端口号置为空,并且将这个 socket 对象放进连接池中,我的想法对吗?
1
ScepterZ 2021-12-07 17:00:33 +08:00 1
一般说连接池都是指客户端的一些东西,服务端的处理就是链接维度的
|
2
liprais 2021-12-07 17:01:45 +08:00
连接池里面的是 jdbc connection,至于 jdbc connection 跟 socket 的对应关系得看 jdbc 驱动的具体实现
|
3
liu1996 OP @ScepterZ 懂了,http 请求是由客户端发送给我们的 web 服务器(如 tomcat ),然后 tomcat 根据请求路径找到 web 项目中对应的方法(这里应该是 servlet 中的 service 方法)去执行。而与 mysql 的通信是由 web 项目中的代码来进行的,所以本质上就是 web 服务器( tomcat )与 mysql 的通信,连接池中 connection 的客户端 ip 和端口号也就是 tomcat 的 ip 和端口号。
我之前理解的误区是 http 请求直接与 mysql 建立连接。 |