用golang随便写了一个TCP服务测试Windows Server 2008的最大连接数
server
package main
import (
"fmt"
"log"
"net"
"os"
)
var count = 0
func main() {
//建立socket,监听端口
netListen, err := net.Listen("tcp", ":9999")
CheckError(err)
defer func(l net.Listener) {
fmt.Println("关闭")
l.Close()
}(netListen)
Log("Waiting for clients")
for {
conn, err := netListen.Accept()
if err != nil {
continue
}
Log(conn.RemoteAddr().String(), " 连接成功请求地址")
go handleConnection(conn)
}
}
//处理连接
func handleConnection(conn net.Conn) {
count++
Log(count)
}
func Log(v ...interface{}) {
log.Println(v...)
}
func CheckError(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(1)
}
}
client
package main
import (
"fmt"
"net"
"os"
"time"
)
func sender(conn net.Conn) {
words := "hello world!hello world!"
conn.Write([]byte(words))
fmt.Println("send over")
}
func main() {
for i := 0; i < 200000; i++ {
server := "10.1.210.127:9999"
tcpAddr, err := net.ResolveTCPAddr("tcp4", server)
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(1)
}
_, err = net.DialTCP("tcp", nil, tcpAddr)
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(1)
}
time.Sleep(100 * time.Millisecond)
}
}
测试结果
tcp连接数Windows Server 2008自带的监控工具 “ESTABLISHED”状态达到2000的样子,就开始回收了。
然后使用
netstat -an|find "ESTABLISHED" /c
查看,结果是也是一样的。看来Windows Server 2008 默认最大的连接数就是2000左右。