|
** 原创文章,请勿转载 **
并发服务器是一个老生常谈的话题,今天这里也写一个。
1. 目标:
同时在线连接20万(c20w)。
开发语言:重要的事情说三遍,GOLANG, GOLANG, GOLANG!
那为什么是20W,不是30W或其它? 这个数字随意。 :)
2. 环境:
虚拟机(xenserver), 虚出6台机器(OS: CentOS 6.6 64bit) :
. 一台服务器8核CPU,2G内存
. 五台客户端2核CPU,2G内存
3. 改centos几个参数, 6台机器一样:
# ulimit -a
看 open files
改成300000(大于20W就行) :
# ulimit -n 300000
改端口范围
# echo 1025 65000 > /proc/sys/net/ipv4/ip_local_port_range
4. golang代码
服务端: server.go
package main
import ("log" "net"
"sync"
"time"
)
func main() {
tcpAddr, err := net.ResolveTCPAddr("tcp", ":5000")
if err != nil {
log.Fatalln("net.ResolveTCPAddr fail", err)
}
listener, err := net.ListenTCP("tcp4", tcpAddr)
if err != nil {
log.Println("server failed to start...")
return
}
defer listener.Close()
go print()
log.Println("begin listening, addr : ", tcpAddr)
for {
conn, err := listener.Accept()
if err != nil {
log.Println("socket accept failed. reason: ", err)
continue
}
go handleConnection(conn)
}
}
func print() {
ticker := time.NewTicker(5 * time.Second)
for {
|
|
|