sample_chain/order/token/server.go

94 lines
2.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package token
import (
"errors"
"net"
pb "schain/proto"
"time"
"google.golang.org/grpc"
"google.golang.org/grpc/keepalive"
)
const (
//服务器在处理任务或执行操作时至少需要等待1分钟的时间间隔
serverMinInterval = time.Duration(1) * time.Minute
//5秒连接超时
connectionTimeout = 5 * time.Second
)
type Server struct {
Listener net.Listener
Server *grpc.Server
}
func (s *Server) Start() error {
if s.Listener == nil {
return errors.New("nil listener")
}
if s.Server == nil {
return errors.New("nil server")
}
return s.Server.Serve(s.Listener)
}
func (s *Server) Stop() {
if s.Server != nil {
s.Server.Stop()
}
}
func NewServer(address string) (*Server, error) {
if address == "" {
return nil, errors.New("server listen address not provided")
}
listener, err := net.Listen("tcp", address)
if err != nil {
return nil, err
}
//普通方法一元拦截器grpc.UnaryInterceptor
/*interceptor := func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
if !is_ahtu {
handler(ctx, req)
is_ahtu = true
}
if Check(ctx) {
handler(ctx, req)
}
return
}
*/
var serverOpts []grpc.ServerOption
serverKeepAliveParameters := keepalive.ServerParameters{
Time: 1 * time.Minute,
Timeout: 20 * time.Second,
}
serverOpts = append(serverOpts, grpc.KeepaliveParams(serverKeepAliveParameters))
serverOpts = append(serverOpts, grpc.MaxSendMsgSize(maxSendMessageSize))
serverOpts = append(serverOpts, grpc.MaxRecvMsgSize(maxRecvMessageSize))
kep := keepalive.EnforcementPolicy{
MinTime: serverMinInterval,
PermitWithoutStream: true,
}
serverOpts = append(serverOpts, grpc.KeepaliveEnforcementPolicy(kep))
serverOpts = append(serverOpts, grpc.ConnectionTimeout(connectionTimeout))
//serverOpts = append(serverOpts, grpc.UnaryInterceptor(interceptor))
// create a gRPC server object
grpcServer := grpc.NewServer(serverOpts...)
request_server := &RequestServer{}
pb.RegisterPingServer(grpcServer, request_server)
return &Server{Listener: listener, Server: grpcServer}, err
}