mentalidade
V2EX  ›  程序员

go 的 http 并发请求多个 URL?

By mentalidade at 2017 年 10 月 30 日 · 5838 次点击

我要请求 10 个 url,因为这些接口并不一定是通的,所以我设置了 1.5 秒的链接超时。但是如果一个一个的请求,假如 10 个 url 都连接超时,这个接口就需要耗费 15 秒。怎么搞成并发的,一共就耗时 1.5 这种。 类似于 openresty 的这种,即使全失败最多耗时 1.5 秒。

    local threads = {}
    for k, server in ipairs(res) do
        threads[k] = ngx.thread.spawn(check_status, server)
    end

    for i=1, #threads do
        local ok, res = ngx.thread.wait(threads[i])
    end

go 里面用哪个函数呢?

11 条回复  •  2017-10-31 00:17:09 +08:00
halfcrazy
   1
halfcrazy  
   2017 年 10 月 30 日
用 go 新起 goroutine 啊。。
specita
   2
specita  
   2017 年 10 月 30 日   ❤️ 1
简单的 go func () {....} 就可以了
rockyou12
   3
rockyou12  
   2017 年 10 月 30 日
大哥你都用 go 了……根本不用和线程打交道好不……
rockyou12
   4
rockyou12  
   2017 年 10 月 30 日
还有 go 的官方教程真的很良心,lz 看完了来嘛 http://tour.studygolang.com/concurrency/1
mentalidade
   5
mentalidade  
OP
   2017 年 10 月 30 日 via Android
@specita 因为这个 url 不是固定的,需要循环判断拼接,可以循环里面 go func 吗?
mentalidade
   6
mentalidade  
OP
   2017 年 10 月 30 日 via Android
@rockyou12 好,谢谢,一会仔细看
sagaxu
   7
sagaxu  
   2017 年 10 月 30 日 via Android
这种问题建议发到 php 节点
boboliu
   8
boboliu  
   2017 年 10 月 30 日 via Android
@sagaxu 因为给 gopher 丢人么 233
mason961125
   9
mason961125  
   2017 年 10 月 30 日
goroutine + channel
iyaozhen
   10
iyaozhen  
   2017 年 10 月 30 日 via Android
@mentalidade 你先把 url 都生成好不就行了。
pynix
   11
pynix  
   2017 年 10 月 31 日
退群吧。。
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 43ms · 3.9.8.5