go 的 http 并发请求多个 URL?

2017-10-30 20:03:33 +08:00
 mentalidade

我要请求 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 里面用哪个函数呢?

5098 次点击
所在节点    程序员
11 条回复
halfcrazy
2017-10-30 20:14:58 +08:00
用 go 新起 goroutine 啊。。
specita
2017-10-30 20:26:16 +08:00
简单的 go func () {....} 就可以了
rockyou12
2017-10-30 20:31:59 +08:00
大哥你都用 go 了……根本不用和线程打交道好不……
rockyou12
2017-10-30 20:33:40 +08:00
还有 go 的官方教程真的很良心,lz 看完了来嘛 http://tour.studygolang.com/concurrency/1
mentalidade
2017-10-30 20:43:21 +08:00
@specita 因为这个 url 不是固定的,需要循环判断拼接,可以循环里面 go func 吗?
mentalidade
2017-10-30 20:43:46 +08:00
@rockyou12 好,谢谢,一会仔细看
sagaxu
2017-10-30 20:44:21 +08:00
这种问题建议发到 php 节点
boboliu
2017-10-30 20:55:57 +08:00
@sagaxu 因为给 gopher 丢人么 233
mason961125
2017-10-30 22:17:56 +08:00
goroutine + channel
iyaozhen
2017-10-30 22:31:02 +08:00
@mentalidade 你先把 url 都生成好不就行了。
pynix
2017-10-31 00:17:09 +08:00
退群吧。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/402046

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX