Я столкнулся с проблемой, когда я создаю новое соединение каждый запрос, и это ужасно неэффективно.
Я бы хотел, чтобы установленное максимальное количество соединений TLS оставалось открытым / кэшированным на моем клиенте одновременно. Когда данные готовы к передаче, они сначала проверяют, существует ли незанятое соединение, затем проверяют, может ли оно создать новое соединение (то есть число открытых соединений <максимально допустимое). Если оба значения имеют значение false, необходимо подождать, пока соединение не станет свободным или число открытых соединений уменьшится. Соединения также должны быть разорваны после того, как они простаивают в течение определенного периода времени. </p>
Вот некоторый (плохой) псевдокод того, что я имею в виду. Могу ли я получить некоторые предложения?
func newTLSConnection(netDialer, host, tlsConfig) (tls.Con) {
// Set up the certs
// ...
// Make A TLS Connection
con, _ := tls.DialWithDialer(netDialer, "tcp", host, tlsConfig)
return con
}
func (con tls.Con) Do (someData []byte) {
// If con
// Send some date to the server
_, _ := con.Write(someData)
// Get response from server
response := make([]byte, 100)
_, _ := io.ReadFull(con, response)
return
}
main(){
var cons []tls.Con
maxConSize := 3
while {
if allConsInSliceAreBusy() && len(cons) < maxConSize{
newCon = NewTLSConnection(...)
cons = append(cons, newCon)
conToUse := newCon
conToUse.Do([]byte("stuff"))
} else if !allConsInSliceAreBusy() {
conToUse := firstOpenConInCons()
conToUse.Do([]byte("stuff"))
} else{
// NOP. Max cons created and they are all busy.
// Wait for one to become idle or close.
}
}
}
Спасибо!