forked from LockGit/gochat
/
connect.go
115 lines (103 loc) 路 3.52 KB
/
connect.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
/**
* Created by lock
* Date: 2019-08-09
* Time: 18:18
*/
package connect
import (
"fmt"
_ "net/http/pprof"
"runtime"
"time"
"github.com/admpub/gochat/config"
"github.com/google/uuid"
"github.com/sirupsen/logrus"
)
var DefaultServer *Server
type Connect struct {
ServerId string
}
func New() *Connect {
return new(Connect)
}
func (c *Connect) Run() {
// get Connect layer config
connectConfig := config.Conf.Connect
//set the maximum number of CPUs that can be executing
runtime.GOMAXPROCS(connectConfig.ConnectBucket.CpuNum)
//init logic layer rpc client, call logic layer rpc server
if err := c.InitLogicRpcClient(); err != nil {
logrus.Panicf("InitLogicRpcClient err:%s", err.Error())
}
//init Connect layer rpc server, logic client will call this
Buckets := make([]*Bucket, connectConfig.ConnectBucket.CpuNum)
for i := 0; i < connectConfig.ConnectBucket.CpuNum; i++ {
Buckets[i] = NewBucket(BucketOptions{
ChannelSize: connectConfig.ConnectBucket.Channel,
RoomSize: connectConfig.ConnectBucket.Room,
RoutineAmount: connectConfig.ConnectBucket.RoutineAmount,
RoutineSize: connectConfig.ConnectBucket.RoutineSize,
})
}
operator := new(DefaultOperator)
DefaultServer = NewServer(Buckets, operator, ServerOptions{
WriteWait: 10 * time.Second,
PongWait: 60 * time.Second,
PingPeriod: 54 * time.Second,
MaxMessageSize: 512,
ReadBufferSize: 1024,
WriteBufferSize: 1024,
BroadcastSize: 512,
})
c.ServerId = fmt.Sprintf("%s-%s", "ws", uuid.New().String())
//init Connect layer rpc server ,task layer will call this
if err := c.InitConnectWebsocketRpcServer(); err != nil {
logrus.Panicf("InitConnectWebsocketRpcServer Fatal error: %s \n", err.Error())
}
//start Connect layer server handler persistent connection
if err := c.InitWebsocket(); err != nil {
logrus.Panicf("Connect layer InitWebsocket() error: %s \n", err.Error())
}
}
func (c *Connect) RunTcp() {
// get Connect layer config
connectConfig := config.Conf.Connect
//set the maximum number of CPUs that can be executing
runtime.GOMAXPROCS(connectConfig.ConnectBucket.CpuNum)
//init logic layer rpc client, call logic layer rpc server
if err := c.InitLogicRpcClient(); err != nil {
logrus.Panicf("InitLogicRpcClient err:%s", err.Error())
}
//init Connect layer rpc server, logic client will call this
Buckets := make([]*Bucket, connectConfig.ConnectBucket.CpuNum)
for i := 0; i < connectConfig.ConnectBucket.CpuNum; i++ {
Buckets[i] = NewBucket(BucketOptions{
ChannelSize: connectConfig.ConnectBucket.Channel,
RoomSize: connectConfig.ConnectBucket.Room,
RoutineAmount: connectConfig.ConnectBucket.RoutineAmount,
RoutineSize: connectConfig.ConnectBucket.RoutineSize,
})
}
operator := new(DefaultOperator)
DefaultServer = NewServer(Buckets, operator, ServerOptions{
WriteWait: 10 * time.Second,
PongWait: 60 * time.Second,
PingPeriod: 54 * time.Second,
MaxMessageSize: 512,
ReadBufferSize: 1024,
WriteBufferSize: 1024,
BroadcastSize: 512,
})
//go func() {
// http.ListenAndServe("0.0.0.0:9000", nil)
//}()
c.ServerId = fmt.Sprintf("%s-%s", "tcp", uuid.New().String())
//init Connect layer rpc server ,task layer will call this
if err := c.InitConnectTcpRpcServer(); err != nil {
logrus.Panicf("InitConnectWebsocketRpcServer Fatal error: %s \n", err.Error())
}
//start Connect layer server handler persistent connection by tcp
if err := c.InitTcpServer(); err != nil {
logrus.Panicf("Connect layerInitTcpServer() error:%s\n ", err.Error())
}
}