This repository was archived by the owner on Dec 29, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.go
93 lines (75 loc) · 2.07 KB
/
server.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
package mrpc
import (
"github.com/go-ll/mrpc/internal"
"github.com/go-ll/mrpc/internal/serverinterceptors"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/core/stat"
"google.golang.org/grpc"
"log"
"time"
)
type RpcServer struct {
server internal.Server
register internal.RegisterFn
}
func MustNewServer(c RpcServerConf, register internal.RegisterFn) *RpcServer {
server, err := NewServer(c, register)
if err != nil {
log.Fatal(err)
}
return server
}
func NewServer(c RpcServerConf, register internal.RegisterFn) (*RpcServer, error) {
var err error
// TODO ConfValidate
var server internal.Server
metrics := stat.NewMetrics(c.Addr)
serverOptions := []internal.ServerOption{
internal.WithMetrics(metrics),
}
server = internal.NewRpcServer(c.Addr, serverOptions...)
server.SetName(c.Name)
if err = setupInterceptors(server, c, metrics); err != nil {
return nil, err
}
rpcServer := &RpcServer{
server: server,
register: register,
}
return rpcServer, nil
}
func (rs *RpcServer) AddOptions(options ...grpc.ServerOption) {
rs.server.AddOptions(options...)
}
func (rs *RpcServer) AddStreamInterceptors(interceptors ...grpc.StreamServerInterceptor) {
rs.server.AddStreamInterceptors(interceptors...)
}
func (rs *RpcServer) AddUnaryInterceptors(interceptors ...grpc.UnaryServerInterceptor) {
rs.server.AddUnaryInterceptors(interceptors...)
}
// Start starts the RpcServer.
// Graceful shutdown is enabled by default.
// Use proc.SetTimeToForceQuit to customize the graceful shutdown period.
func (rs *RpcServer) Start() {
if err := rs.server.Start(rs.register); err != nil {
logx.Error(err)
panic(err)
}
}
func (rs *RpcServer) Stop() {
logx.Close()
}
func DontLogContextForMethod(method string) {
// TODO
}
func SetServerSlowThreshold(threshold time.Duration) {
// TODO
}
func setupInterceptors(server internal.Server, c RpcServerConf, metrics *stat.Metrics) error {
if c.Timeout > 0 {
server.AddUnaryInterceptors(serverinterceptors.UnaryTimeoutInterceptor(
time.Duration(c.Timeout) * time.Millisecond))
}
// TODO Auth
return nil
}