# netpool **Repository Path**: youkelike/netpool ## Basic Information - **Project Name**: netpool - **Description**: 网络连接池 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-23 - **Last Updated**: 2025-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 客户端连接池 silenceper/pool(不是服务端) 初始连接数 最大空闲连接数、连接最大空闲时长 最大连接数 空闲连接 chan 阻塞请求队列 实现客户端连接池 一个连接池对象 Pool 创建实例时,创建好初始数量的连接,放到一个有缓冲的 chan(idleConns) 中 一个连接对象 idleConn 字段 conn 是已建立的连接 lastIdleTime 最近一次活跃时间 一个请求对象 connReq 存放到一个 slice 中,用于表示请求队列 Get 方法 用一个大的 for 循环来支持重试(拿到的连接超时需要重试) 连接数已达最大值时,需要把请求放到队列,并阻塞等待 等待的同时还要处理 context 超时的情况,超时后虽然返回了,但等待队列中的请求还在,还有可能被归还连接的操作调用到,有两种处理方式 从请求队列中移除当前请求 开一个 goroutine 来接收请求中的 chan,收到后重新放回连接池 Put 方法 先检查等待队列,有就把连接交给队尾请求 再尝试放到连接池 连接池已满就直接关闭连接