Http GET使用Go请求超过一个tls连接

时间:2015-04-01 09:05:24

标签: go

目前,我正在使用http GET请求连接到服务器。 Get请求是从线程内部调用的。对于每个Get请求,正在使用一个线程但问题是每个Get请求,建立一个连接。因此,如果有10000 Get个请求,那么将建立10000个连接。但是,我想首先在我和服务器之间建立一个TLS连接,然后创建一个线程,并从该线程我想通过已建立的连接发送Get

e.g。

for {
    1. establish a tls connection
    2. create thread go func()
}

func() {
    resp, err := http.Get(url) // should be over already established tls connection
}

1 个答案:

答案 0 :(得分:2)

首先,只是为了澄清,Go有 goroutines ,而不是线程。 Goroutines是合作轻量级的过程。 Go运行时将许多goroutine切片到可用的操作系统线程上。这个线程抽象是Go的一个重要特性。

关于使用goroutine进行许多并发GET请求的问题,最好让标准API处理请求的多路复用到您的连接。可能存在大量请求和较少数量的支持连接。如果您使用保持活动连接,则无需关心详细信息。

用于控制代理,TLS配置,保持活动,压缩和其他设置,create a Transport

HTTP / 1.1处理与http和https的保持活动连接。当向同一服务器发出许多请求时,这是一个好处。只要您强制它在每次请求后关闭每个连接,您就可以从保留活动连接中获得很多好处。

通常的口头禅适用:不要过早优化。尽可能清楚地描述您需要做的事情。基准测试(Go有一个有用的微基准工具)。在您决定是否或如何优化性能之前,请执行此操作。