关于 mysql 连接、连接池以及 socket 的疑问

2021-12-07 16:58:19 +08:00
 liu1996

mysql 的每一个 connection 底层都是一个 socket 连接对吗?(别说 socket 是抽象接口,这里就把它的实现称为 socket ) 服务端每次接收到客户端请求时都会生成一个新的 socket ,新的 socket 中有服务器 ip 、服务器端口号、客户端 ip 、客户端端口号,以此来表明这是某个客户端与服务端的连接。 那么连接池中的 socket 是什么样的?是有多个服务器 ip 、服务器端口号一样,客户端 ip 、客户端端口号都为空的 socket 对象吗?然后每次有新的客户端请求进来,就拿出一个 socket 对象,把它的客户端 ip 、客户端端口号置为这个请求的,用完以后再把客户端 ip 、客户端端口号置为空,并且将这个 socket 对象放进连接池中,我的想法对吗?

1212 次点击
所在节点    程序员
3 条回复
ScepterZ
2021-12-07 17:00:33 +08:00
一般说连接池都是指客户端的一些东西,服务端的处理就是链接维度的
liprais
2021-12-07 17:01:45 +08:00
连接池里面的是 jdbc connection,至于 jdbc connection 跟 socket 的对应关系得看 jdbc 驱动的具体实现
liu1996
2021-12-08 09:42:20 +08:00
@ScepterZ 懂了,http 请求是由客户端发送给我们的 web 服务器(如 tomcat ),然后 tomcat 根据请求路径找到 web 项目中对应的方法(这里应该是 servlet 中的 service 方法)去执行。而与 mysql 的通信是由 web 项目中的代码来进行的,所以本质上就是 web 服务器( tomcat )与 mysql 的通信,连接池中 connection 的客户端 ip 和端口号也就是 tomcat 的 ip 和端口号。

我之前理解的误区是 http 请求直接与 mysql 建立连接。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/820666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX