golang的多响应异步请求

Elo*_*nco 1 asynchronous request go

我需要向服务器发出请求,该请求在不同时间返回不同的响应。我的意思是,服务器生成不同的响应,并且这些响应需要不同的执行时间,因此服务器会在响应可用时立即返回响应。

我想在服务器返回给我后立即在屏幕上打印这些响应(目前,我会解决这个问题)。

到目前为止我能做的就是打印响应,但前提是服务器返回所有响应。因此,如果第一个响应需要 1 秒,最后一个响应需要 10 秒,那么我的代码需要等待 10 秒才能打印所有消息。

编辑:添加代码我有:

//Config is gotten from yml file
RestConfig       = Config["rest"].(map[string]interface{})
ServerConfig     = Config["server"].(map[string]interface{})
RequestUrl      := ServerConfig["url"]

RequestReader   := bytes.NewReader(body)
Request, _      := http.NewRequest("POST", RequestUrl.(string), RequestReader)

//AppendHeaders append the needing headers to the request 
client.AppendHeaders(Request, RestConfig["headers"])

//the type of client.HttpClient is *http.Client
Response, _     := client.HttpClient.Do(Request)

//And to print in the screen
defer Response.Body.Close()

fmt.Println( "-> Receiving response:\n---\n" )
fmt.Println( Response , "\n---\n-> Response body:\n---\n")
body_resp, _ := ioutil.ReadAll(Response.Body)
fmt.Println( string(body_resp) )
fmt.Println( "\n--\n")
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到吗??

非常感谢。

Elo*_*nco 6

最后我的代码是这样的:

package main

import (
    "fmt"
    "log"
    "bytes"
    "strings"
    "bufio"
    "net/http"
)

func main() {
  var body = "The body"
  RequestReader := bytes.NewReader([]byte(body))
  req, err := http.NewRequest("POST", "the_url", RequestReader)
  if err != nil {
    log.Fatal(err)
  }
  req.Header.Add("Accept", "application/xml")
  req.Header.Add("Content-Type", "application/xml")
  req.Header.Add("AG-Authorization", "key")
  req.Header.Add("AG-Forwarded-Hosts", "*")

  resp, err := (&http.Client{}).Do(req)
  if err != nil {
    log.Fatal(err)
  }
  reader := bufio.NewReader(resp.Body)
  message := ""
  for {
    line, err := reader.ReadBytes('\n')
    if err != nil {
      log.Fatal(err)
 }
    message = message + string(line)
    if strings.Contains(message, "<!-- End mark for each message -->"){
        fmt.Println(message)
        message = ""
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢大家。