前言:最近在做一个php附件转移的功能,起初是通过php实现了,但是咧太浪费时间了如果我的附件有10万张,假设1张图片上传需要1秒,那么意味着要花费10万秒,那这个时间我是不能容忍的,因此想通过go语言协程来实现并发请求php开发的接口来实现并行转移附件,这样就可以大大减少附件上传的时间
首先你需要下载go语言模拟curl请求的包,
然后编写接口访问接口的go语言
package main
import (
"fmt"
"sync"
"time"
"github.com/idoubi/goz"
"log"
)
func main() {
wg := &sync.WaitGroup{}
limiter := make(chan bool, 20)
codedata := [...]string{"00001","00002","00003","00004"}
for _,val := range codedata{
wg.Add(1)
limiter <- true
go getApi(val,limiter,wg)
}
wg.Wait()
}
func getApi(idcode string, limiter chan bool, wg *sync.WaitGroup) {
defer wg.Done()
cli := goz.NewClient()
resp, err := cli.Get("xxxt?id="+idcode,goz.Options{
Headers: map[string]interface{}{
"User-Agent": "testing/1.0",
"Accept": "application/json",
"X-Foo": []string{"Bar", "Baz"},
},
})
//resp, err := cli.Get("https://www.baidu.com/")
if err != nil {
log.Fatalln(err)
}
body,err1 := resp.GetBody()
if err1 != nil{
log.Fatalln(err)
}
contents := body.GetContents()
fmt.Printf("value:%s,idcode:%v,time:%v\n",contents,idcode,time.Now().Unix())
time.Sleep(1 * time.Second)
<-limiter
}
结束:这期间用tp5.1访问时候会频繁的报错,后面换原生的方式开发接口,并且通过控制并发的数量从而实现对服务器减压,防止并发过大,
网友评论