forked from panjf2000/gnet
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathoptions.go
136 lines (108 loc) · 2.52 KB
/
options.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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Copyright 2019 Andy Pan. All rights reserved.
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.
package gnet
import (
"math"
"time"
"github.com/luyu6056/tls"
)
// Option is a function that will set up option.
type Option func(opts *Options)
func initOptions(options ...Option) *Options {
opts := new(Options)
opts.WriteTimeOut = math.MaxInt32
opts.PidName = "pid"
for _, option := range options {
option(opts)
}
return opts
}
// Options are set when the client opens.
type Options struct {
//0 will be runtime.NumCPU().
LoopNum int
// ReusePort indicates whether to set up the SO_REUSEPORT socket option.
ReusePort bool
// Ticker indicates whether the ticker has been set up.
Ticker bool
// TCPKeepAlive (SO_KEEPALIVE) socket option.
TCPKeepAlive time.Duration
// ICodec encodes and decodes TCP stream.
Codec ICodec
Isblock bool
Tlsconfig *tls.Config
TCPNoDelay bool
WriteTimeOut int
PidName string
Graceful bool
}
// WithOptions sets up all options.
func WithOptions(options Options) Option {
return func(opts *Options) {
*opts = options
}
}
// WithMulticore sets up multi-cores with gnet.
func WithLoopNum(n int) Option {
return func(opts *Options) {
opts.LoopNum = n
}
}
// WithReusePort sets up SO_REUSEPORT socket option.
func WithReusePort(reusePort bool) Option {
return func(opts *Options) {
opts.ReusePort = reusePort
}
}
// WithTCPKeepAlive sets up SO_KEEPALIVE socket option.
func WithTCPKeepAlive(tcpKeepAlive time.Duration) Option {
return func(opts *Options) {
opts.TCPKeepAlive = tcpKeepAlive
}
}
// WithTicker indicates that a ticker is set.
func WithTicker(ticker bool) Option {
return func(opts *Options) {
opts.Ticker = ticker
}
}
// WithCodec sets up a codec to handle TCP stream.
func WithCodec(codec ICodec) Option {
return func(opts *Options) {
opts.Codec = codec
}
}
// 设置为阻塞式
func WithBlock(block bool) Option {
return func(opts *Options) {
opts.Isblock = block
}
}
// 开启tls模式
func WithTls(tlsconfig *tls.Config) Option {
return func(opts *Options) {
opts.Tlsconfig = tlsconfig
}
}
func WithTCPNoDelay(b bool) Option {
return func(opts *Options) {
opts.TCPNoDelay = b
}
}
// 单位秒
func WithWriteTimeOut(i int) Option {
return func(opts *Options) {
opts.WriteTimeOut = i
}
}
func WithPidName(name string) Option {
return func(opts *Options) {
opts.PidName = name
}
}
func WithGraceful(graceful bool) Option {
return func(opts *Options) {
opts.Graceful = graceful
}
}