我为 mongodb 创建了数据库连接池:
type dbcp struct {
sync.Mutex
connections map[*mongo.Client]struct{}
}
3个主要功能dbcp
:
func newDBConnection() *mongo.Client {
// Возвращает новое соединение
}
func getDBConnection() *mongo.Client {
if len(dbcp.connections) {
// Если пул не пустой, возвращает соединение из пула
}
// Если пул пустой, возвращает новое соединение:
return newDBConnection():
}
func (c *mongo.Client) release() {
// Добавляет соединение в пул и устанавливает таймаут
// закрытия этого соединения и удаления из пула
}
每个请求有条件地/test?id=123
打开一个连接,id=123
从数据库中获取数据,使用该方法将连接发送到池c.release()
无论有多少请求同时进入 - 1000、2000 或 10000,我的计算机上池中的连接永远不会超过 6 个。我是否正确理解Go
goroutine 中处理的每个请求都会阻塞一个线程?我一直认为 goroutine 在等待 I/O 操作时会自行切换(也就是说,它们不会阻塞)。如果是这样,如何处理?如何让一台服务器同时支持大量连接?
UPD:我检查了Node.js
- 连接数仍然是 6,尽管该语言是在单线程环境中解释的。