-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
118 lines (102 loc) · 1.76 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package main
import (
"bfmq/lib/lockstep"
"bfmq/lib/tinypool"
"bfmq/mod"
"bfmq/msg"
"github.com/gobwas/ws"
"log"
"net"
"runtime"
"syscall"
"time"
)
const (
NEW uint8 = iota + 1
MSG
CLOSE
)
type Task struct {
Cmd uint8
A *msg.Agent
Msg *msg.C2S
}
func tick() {
tinypool.KickIdles()
tinypool.Time2PVE()
tinypool.Time2Play()
}
func ticker() {
msg.TimerQueue <- tick
time.AfterFunc(1*time.Second, ticker)
}
func init() {
tinypool.PreRun(15, 8, 5)
//for fd
log.Println("optimize linux soft limit......")
var stRlimit syscall.Rlimit
if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &stRlimit); err != nil {
panic(err)
}
stRlimit.Cur = stRlimit.Max
if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &stRlimit); err != nil {
panic(err)
}
log.Printf("optimize linux success:%d", stRlimit.Cur)
//numCPU := 0
numCPU := runtime.NumCPU()
log.Printf("set available CPU core:%d", numCPU)
runtime.GOMAXPROCS(numCPU)
log.Println("init success")
}
func main() {
ln, err := net.Listen("tcp", "127.0.0.1:7737")
if err != nil {
return
}
time.AfterFunc(1*time.Second, ticker)
go maingo()
for {
conn, err := ln.Accept()
if err != nil {
log.Printf("accept failed:%v", err)
if conn != nil {
conn.Close()
}
continue
}
_, err = ws.Upgrade(conn)
if err != nil {
log.Printf("websocket upgrade failed:%v", err)
if conn != nil {
conn.Close()
}
continue
}
msg.NewAgent(conn)
}
}
func maingo() {
for {
select {
case task := <-msg.MainReqQueue:
mod.HandleMsg(task)
case task := <-lockstep.RoomOutQueue:
mod.HandleRoom(task)
case f := <-msg.TimerQueue:
if f != nil {
f()
}
}
}
}
/*
func roomgo() {
for {
select {
case task := <-lockstep.RoomInQueue:
mod.HandleRoom(task)
}
}
}
*/