-
Notifications
You must be signed in to change notification settings - Fork 809
/
option.go
133 lines (99 loc) · 3.5 KB
/
option.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
/*
* Copyright 2021 CloudWeGo Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package remote
import (
"context"
"net"
"time"
"github.com/cloudwego/kitex/pkg/profiler"
"github.com/cloudwego/kitex/pkg/remote/trans/nphttp2/grpc"
"github.com/cloudwego/kitex/pkg/rpcinfo"
"github.com/cloudwego/kitex/pkg/serviceinfo"
"github.com/cloudwego/kitex/pkg/streaming"
)
// Option is used to pack the inbound and outbound handlers.
type Option struct {
Outbounds []OutboundHandler
Inbounds []InboundHandler
StreamingMetaHandlers []StreamingMetaHandler
}
// PrependBoundHandler adds a BoundHandler to the head.
func (o *Option) PrependBoundHandler(h BoundHandler) {
switch v := h.(type) {
case DuplexBoundHandler:
o.Inbounds = append([]InboundHandler{v}, o.Inbounds...)
o.Outbounds = append([]OutboundHandler{v}, o.Outbounds...)
case InboundHandler:
o.Inbounds = append([]InboundHandler{v}, o.Inbounds...)
case OutboundHandler:
o.Outbounds = append([]OutboundHandler{v}, o.Outbounds...)
default:
panic("invalid BoundHandler: must implement InboundHandler or OutboundHandler")
}
}
// AppendBoundHandler adds a BoundHandler to the end.
func (o *Option) AppendBoundHandler(h BoundHandler) {
switch v := h.(type) {
case DuplexBoundHandler:
o.Inbounds = append(o.Inbounds, v)
o.Outbounds = append(o.Outbounds, v)
case InboundHandler:
o.Inbounds = append(o.Inbounds, v)
case OutboundHandler:
o.Outbounds = append(o.Outbounds, v)
default:
panic("invalid BoundHandler: must implement InboundHandler or OutboundHandler")
}
}
// ServerOption contains option that is used to init the remote server.
type ServerOption struct {
SvcInfo *serviceinfo.ServiceInfo
TransServerFactory TransServerFactory
SvrHandlerFactory ServerTransHandlerFactory
Codec Codec
PayloadCodec PayloadCodec
// Listener is used to specify the server listener, which comes with higher priority than Address below.
Listener net.Listener
// Address is the listener addr
Address net.Addr
ReusePort bool
// Duration that server waits for to allow any existing connection to be closed gracefully.
ExitWaitTime time.Duration
// Duration that server waits for after error occurs during connection accepting.
AcceptFailedDelayTime time.Duration
// Duration that the accepted connection waits for to read or write data.
MaxConnectionIdleTime time.Duration
ReadWriteTimeout time.Duration
InitOrResetRPCInfoFunc func(rpcinfo.RPCInfo, net.Addr) rpcinfo.RPCInfo
TracerCtl *rpcinfo.TraceController
Profiler profiler.Profiler
ProfilerTransInfoTagging TransInfoTagging
ProfilerMessageTagging MessageTagging
GRPCCfg *grpc.ServerConfig
GRPCUnknownServiceHandler func(ctx context.Context, method string, stream streaming.Stream) error
Option
}
// ClientOption is used to init the remote client.
type ClientOption struct {
SvcInfo *serviceinfo.ServiceInfo
CliHandlerFactory ClientTransHandlerFactory
Codec Codec
PayloadCodec PayloadCodec
ConnPool ConnPool
Dialer Dialer
Option
EnableConnPoolReporter bool
}