如何在 Go 中长轮询多个 url?

这是我到目前为止所拥有的:


package main


import (

    "encoding/json"

    "fmt"

    "io/ioutil"

    "log"

    "net/http"

)


func subscribe(urls Urls) []byte {

    req, err := http.NewRequest("GET", urls.Url, nil)

    if err != nil {

        log.Fatal(err)

    }


    req.Header.Set("authentication", "Bearer " + urls.Token)


    http_client := &http.Client{}

    res, err := http_client.Do(req)

    if err != nil {

        log.Fatal(err)

    }


    defer res.Body.Close()


    resourceResp, err := ioutil.ReadAll(res.Body)

    if err != nil {

        log.Fatal(err)

    }


    fmt.Println(string(resourceResp))


    var data map[string]interface{}


    error := json.Unmarshal([]byte(resourceResp), &data)

    if error != nil {

        log.Fatal(error)

    }


    return subscribe(urls)

}


type Urls struct {

    Url string

    Token string

}


func main() {

    var urls [2]Urls


    urls[0] = Urls{

        Url: "https://example.com/users/8",

        Token: "abcdefg",

    }


    urls[1] = Urls{

        Url:   "https://example.com/users/9",

        Token: "hijklmnop",

    }


    subscribe(urls[0])

    subscribe(urls[1])

}

最终目标是“订阅”多个 url 并提取任何更新的数据(最终将其添加到队列中,但一次一步)。之后,重新建立连接。现在,只有第一个订阅运行。谢谢!


缥缈止盈
浏览 117回答 1
1回答

长风秋雁

我认为您要求的是subscribe并行运行这些功能。一种方法是将它们包装在goroutine中并等待所有goroutine完成:func main() {    ...    ...    var wg sync.WaitGroup    wg.Add(len(urls))    for _, url := range(urls) {        go func() {            defer wg.Done()            subscribe(url)        }()    }    wg.Wait()}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go