V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liu1996
V2EX  ›  程序员

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

  •  
  •   liu1996 · 2021-12-07 16:58:19 +08:00 · 1021 次点击
    这是一个创建于 842 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    3 条回复    2021-12-08 09:42:20 +08:00
    ScepterZ
        1
    ScepterZ  
       2021-12-07 17:00:33 +08:00   ❤️ 1
    一般说连接池都是指客户端的一些东西,服务端的处理就是链接维度的
    liprais
        2
    liprais  
       2021-12-07 17:01:45 +08:00
    连接池里面的是 jdbc connection,至于 jdbc connection 跟 socket 的对应关系得看 jdbc 驱动的具体实现
    liu1996
        3
    liu1996  
    OP
       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 建立连接。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3145 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:38 · PVG 20:38 · LAX 05:38 · JFK 08:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.