【发布时间】:2019-08-20 23:15:29
【问题描述】:
我遇到了一个问题,我为每个请求创建一个新连接,而且效率非常低。
我想允许设置的最大 TLS 连接数一次在我的客户端上保持打开/缓存。当数据准备好传输时,它首先检查是否有空闲连接,然后检查是否可以创建新连接(即打开的连接数
这是我想到的一些(糟糕的)伪代码。可以给点建议吗?
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.
}
}
}
谢谢!
【问题讨论】:
-
代码 sn-p 不可读...你想用这行
func (con tls.Con) Do (someData []byte)做什么?? -
Do函数通过 TLS 连接发送数据并读取响应。