1.需求说明
我用django rest framework写了一个简单的用户增删改查小案例,然后我想使用golang实现一个多并发请求,看看我的小项目能承受多少请求!初学go代码不正确,请多多指点。
2.代码实现
//基本的GET请求
package main
import (
"fmt"
"io/ioutil"
"net/http"
"time"
)
// HTTP get请求
func httpget(ch chan int){
resp, err := http.Get("http://localhost:8000/rest/api/user")
if err != nil {
fmt.Println(err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
fmt.Println(resp.StatusCode)
if resp.StatusCode == 200 {
fmt.Println("ok")
}
ch <- 1
}
// 主方法
func main() {
start := time.Now()
// 注意设置缓冲区大小要和开启协程的个人相等
chs := make([]chan int, 2000)
for i := 0; i < 2000; i++ {
chs[i] = make(chan int)
go httpget(chs[i])
}
for _, ch := range chs {
<- ch
}
end := time.Now()
consume := end.Sub(start).Seconds()
fmt.Println("程序执行耗时(s):", consume)
}
3.结果
当我把开了10000个协程时候django后台数据库就崩了哈哈应该连接数过大导致的,所以我就试了2000个感觉有点并发的意思哈哈!左侧是返回的json结果 右侧是django的后台!
4.总结
我们通过go语言的管道channel来实现并发请求,能够解决何避免传统共享内存实现并发的很多问题而且效率会高于共享内存的方法。