我有一个主人和奴隶。主有api调用结果,需要JSON。我有奴隶的proplem,它将这个结果发送给master,第一次我的代码发送json好,但第二次,代码停止(程序等待.....)resp, err := client.Do(req)
,当在master上创建查询时。
代码:
func main (){
for {
// some code, very long code
sendResult(resFiles)
}
}
func sendResult(rf common.ResultFiles) {
jsonValue, err := json.Marshal(rf)
req, err := http.NewRequest(methodPost, ResultAdress,
bytes.NewBuffer(jsonValue))
req.Header.Set("Content-Type", ContentType)
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("response Status:", resp.Status)
}
掌握api电话:
func result(c echo.Context) error {
rf := &ResultFiles{}
err := c.Bind(rf)
if err != nil {
log.Fatal(err)
}
rfChannel <- *rf
return c.JSON(http.StatusOK, nil)
}
我的问题:为什么?可能是标准客户端golang(http.Client)或超时问题?如果我设置了timout - 我的代码因超时而崩溃)))预期...... 谢谢!
答案 0 :(得分:0)
您需要为http.Client添加超时。默认情况下,http.Client将超时指定为0,这意味着根本没有超时。因此,如果服务器没有响应,那么您的应用程序将只是等待响应。本文Don’t use Go’s default HTTP client (in production)中详细介绍了此问题。虽然您创建自定义客户端,但仍需要指定超时。
答案 1 :(得分:0)
问题链接到通道,我将结果工作从站发送到主站到通道,但通道工作没有循环,我添加循环从通道读取数据和所有工作。