为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
缥缈止盈 2023-07-31 15:11:44
这是我到目前为止所拥有的:package mainimport (    "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 并提取任何更新的数据(最终将其添加到队列中,但一次一步)。之后,重新建立连接。现在,只有第一个订阅运行。谢谢!
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

我认为您要求的是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()

}


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信