56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
|
|
package server_tcp
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"fmt"
|
|||
|
|
"framework/goroutineMgr"
|
|||
|
|
"net"
|
|||
|
|
"sync"
|
|||
|
|
|
|||
|
|
"goutil/debugUtil"
|
|||
|
|
|
|||
|
|
"common/clientMgr"
|
|||
|
|
"goutil/logUtil"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// Start 启动服务器
|
|||
|
|
func Start(wg *sync.WaitGroup, address string) {
|
|||
|
|
defer func() {
|
|||
|
|
wg.Done()
|
|||
|
|
}()
|
|||
|
|
|
|||
|
|
// 处理goroutine数量
|
|||
|
|
goroutineName := "server_tcp.Start"
|
|||
|
|
goroutineMgr.Monitor(goroutineName)
|
|||
|
|
defer goroutineMgr.ReleaseMonitor(goroutineName)
|
|||
|
|
|
|||
|
|
msg := fmt.Sprintf("server_tcp begins to listen on:%s...", address)
|
|||
|
|
fmt.Println(msg)
|
|||
|
|
logUtil.InfoLog(msg)
|
|||
|
|
|
|||
|
|
// 监听指定的端口
|
|||
|
|
listener, err := net.Listen("tcp", address)
|
|||
|
|
|
|||
|
|
//debug模式下打印日志
|
|||
|
|
if debugUtil.IsDebug() {
|
|||
|
|
logUtil.DebugLog(fmt.Sprintf("收到客户的连接请求,ip:%v", listener.Addr()))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if err != nil {
|
|||
|
|
panic(fmt.Sprintf("server_tcp listen Error: %s", err))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
for {
|
|||
|
|
// 阻塞直至新连接到来
|
|||
|
|
conn, err := listener.Accept()
|
|||
|
|
if err != nil {
|
|||
|
|
logUtil.ErrorLog("server_tcp accept error: %s", err)
|
|||
|
|
continue
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 创建客户端对象
|
|||
|
|
clientObj := newClient(conn)
|
|||
|
|
clientObj.start()
|
|||
|
|
clientMgr.RegisterClient(clientObj)
|
|||
|
|
}
|
|||
|
|
}
|