本篇文章模拟的场景是:
- 短时间内http客户端大量访问服务端
- http客户端不关闭连接
会有什么现象?
1、服务端测试代码 |
package main
import (
"fmt"
"net/http"
)
func sayHello(w http.ResponseWriter, r *http.Request) {
fmt.Println("msg From Client: Method:\t" + r.Method)
fmt.Fprintln(w, "Hello 沙河!")
}
func main() {
http.HandleFunc("/test", sayHello)
err := http.ListenAndServe(":9090", nil)
if err != nil {
fmt.Printf("http server failed, err:%v\n", err)
return
}
}
2、客户端测试代码 |
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("http://10.211.55.10:9090/test")
if err != nil {
fmt.Printf("get failed, err:%v\n", err)
return
}
// 注释掉链接
//defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Printf("read from resp.Body failed, err:%v\n", err)
return
}
fmt.Print(string(body))
}
3、运行 |
编译服务器端代码:(我是在mac上编写后上传到测试环境里)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o server main.go
编译客户端代码:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o client main.go
分别运行服务器端,和客户端代码
我们主要是想,查看一下,
客户端结束后,server服务端的链接状态
当然,等待一段时间后,符合要求的TIME_WAIT会关闭
因此,
流,文件,链接 要及时关闭 |