【发布时间】:2018-11-22 20:49:01
【问题描述】:
我有主人和奴隶。 Master有api调用结果,它采用JSON。而且我有从机的问题,它在主机上发送这个结果,第一次我的代码很好地发送了 json,但第二次,当在主机上创建查询时,resp, err := client.Do(req) 上的代码停止(程序等待.....)。
救命码:
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 - 我的代码因超时而崩溃)))预期.... 谢谢!
【问题讨论】:
-
首先验证问题出在哪里,客户端还是服务器。如果您从其他一些工具执行 http post 两次,服务器是否工作,例如通过使用
curl?在这种情况下,问题出在您的客户端,或者如果您使用现有工具发布到服务器也遇到了同样的问题,那么问题出在您的服务器上。 -
我检查 - 我的主人有问题 - 频道有问题。
-
好的,那么你不需要发布客户端代码,而是你的服务器代码。 (我们无法仅根据您在此处发布的一小段代码来调试您的服务器代码)
-
我明白了,但我第一次认为奴隶有问题,现在我解决问题并发布结果)))谢谢