2016-07-20 62 views
1

我需要同時調用多個URL。我的函數被同時調用(以毫秒爲單位),但是當我向代碼中添加一個Http post請求時,它會被一個接一個地調用。下面是代碼:Golang:同時功能呼叫http post請求

Check(url1) 
Check(url2) 

func Check(xurl string) { 

    nowstartx := time.Now() 
    startnanos := nowstartx.UnixNano() 
    nowstart := startnanos/1000000 
    fmt.Println(nowstart) 

    json = {"name" : "test"} 
    req, err := http.NewRequest("POST", xurl, bytes.NewBuffer(json)) 
    req.Header.Set("X-Custom-Header", "myvalue") 
    req.Header.Set("Content-Type", "application/json") 
    client := &http.Client{} 
    resp, err := client.Do(req) 

    if err != nil { 
     panic(err) 

    } else { 
     defer resp.Body.Close() 
     body, _ = ioutil.ReadAll(resp.Body) 
    } 

} 

欣賞的幫助,我需要在同一時間(毫秒)當我運行該程序。

+3

他們從來沒有在同一時間實現,你連續調用每個,他們只是執行得非常快。你有沒有去過任何關於Go併發性的文檔?例如:https://tour.golang.org/concurrency/1 – JimB

+0

我經歷了這個https://www.goinggo.net/2014/01/concurrency-goroutines-and-gomaxprocs.html,它應該同時調用。我嘗試了多次,它實際上併發呼叫,除非我添加了發佈請求。有沒有辦法同時調用多個http post請求? – ChrisDave

+2

沒有你開始一個新的goroutine的地方,所以你沒有添加任何併發,並且這兩個調用不能併發執行。 – JimB

回答

2

這是通過使用Goroutines

go Check(url1) 
go Check(url2) 

func Check(xurl string) { 

    nowstartx := time.Now() 
    startnanos := nowstartx.UnixNano() 
    nowstart := startnanos/1000000 
    fmt.Println(nowstart) 

    json = {"name" : "test"} 
    req, err := http.NewRequest("POST", xurl, bytes.NewBuffer(json)) 
    req.Header.Set("X-Custom-Header", "myvalue") 
    req.Header.Set("Content-Type", "application/json") 
    client := &http.Client{} 
    resp, err := client.Do(req) 

    if err != nil { 
     panic(err) 

    } else { 
     defer resp.Body.Close() 
     body, _ = ioutil.ReadAll(resp.Body) 
    } 

} 
+0

哇,它像一個寶石一樣工作..非常感謝。 – ChrisDave

+0

@ChrisDave真棒,隨時接受答案。 – tier1