为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用功能停止 golang gRPC 服务器?

如何使用功能停止 golang gRPC 服务器?

Go
肥皂起泡泡 2022-06-13 16:51:47
查看 grpc-go 中的 helloworld 示例,如何添加一个StopGrpcServer()函数来停止 gRPC 服务器?我正在尝试制作一个 gRPC 服务器的共享 C 库文件,该文件可用于通过 ffi 调用函数来启动和停止 gRPC 服务器。在我的测试中,我能够启动 gRPC 服务器,StartGrpcServer()但我对如何实现StopGrpcServer().package mainimport Cimport (    "context"    "log"    "net"    "google.golang.org/grpc"    pb "google.golang.org/grpc/examples/helloworld/helloworld")const (    port = ":50051")// server is used to implement helloworld.GreeterServer.type server struct {    pb.UnimplementedGreeterServer}// SayHello implements helloworld.GreeterServerfunc (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {    log.Printf("Received: %v", in.GetName())    return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil}//export StopGrpcServerfunc (s *server) StopGrpcServer() {    s.Stop()}//export StartGrpcServerfunc StartGrpcServer() {    lis, err := net.Listen("tcp", port)    if err != nil {        log.Fatalf("failed to listen: %v", err)    }    s := grpc.NewServer()    pb.RegisterGreeterServer(s, &server{})    if err := s.Serve(lis); err != nil {        log.Fatalf("failed to serve: %v", err)    }}func main() {}非常感谢一些帮助。
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我可以通过*grpc.Server在外部全局声明变量StartGrpcServer(),然后在内部使用它来解决问题StopGrpcServer()。


这是工作代码:


package main


import C


import (

    "context"

    "log"

    "net"


    "google.golang.org/grpc"

    pb "google.golang.org/grpc/examples/helloworld/helloworld"

)


var srv *grpc.Server


const (

    port = ":50051"

)


// server is used to implement helloworld.GreeterServer.

type server struct {

    pb.UnimplementedGreeterServer

}


// SayHello implements helloworld.GreeterServer

func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {

    log.Printf("Received: %v", in.GetName())

    return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil

}


//export StopGrpcServer

func StopGrpcServer() {

    srv.Stop()

}


//export StartGrpcServer

func StartGrpcServer() {

    lis, err := net.Listen("tcp", port)

    if err != nil {

        log.Fatalf("failed to listen: %v", err)

    }

    srv = grpc.NewServer()

    pb.RegisterGreeterServer(srv, &server{})

    if err := srv.Serve(lis); err != nil {

        log.Fatalf("failed to serve: %v", err)

    }

}


func main() {}



// Compile with command:

// go build -o greeter.so -buildmode=c-shared server.go


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号