我正在使用
http.Client
实现客户端的长轮询。resp, err := client.Post(url, "application/json", bytes.NewBuffer(jsonPostBytes))
if err != nil {
panic(err)
}
defer resp.Body.Close()
var results []*ResponseMessage
err = json.NewDecoder(resp.Body).Decode(&results) // code blocks here on long-poll
在客户端,有没有一种标准的方法来预先中止/取消请求?
我认为调用resp.Body.Close()
可以实现这一功能,但我必须从另一个goroutine中调用它,因为客户端通常已经被阻塞在读取长轮询响应时。
我知道可以通过http.Transport
设置超时,但我的应用程序逻辑需要根据用户操作来取消请求,而不仅仅是超时。
req.Cancel = ctx.Done()
,它就会为您处理一切。 - captncraig