diff --git a/skills/grpc/global/grpc.go b/skills/grpc/global/grpc.go new file mode 100644 index 0000000..27c5409 --- /dev/null +++ b/skills/grpc/global/grpc.go @@ -0,0 +1,10 @@ +package global + +import "google.golang.org/grpc" + +// 1. 示例化一个grpc server对象 +var Server = grpc.NewServer() + +func Init() { + +} diff --git a/skills/grpc/mcube/apps/hello/hello.go b/skills/grpc/mcube/apps/hello/hello.go new file mode 100644 index 0000000..189dab7 --- /dev/null +++ b/skills/grpc/mcube/apps/hello/hello.go @@ -0,0 +1,59 @@ +package hello + +import ( + "context" + "fmt" + "io" + + "github.com/infraboard/mcube/v2/ioc" + grpc_server "github.com/infraboard/mcube/v2/ioc/config/grpc" + "gitlab.com/go-course-project/go17/skills/grpc/service" + "google.golang.org/grpc" +) + +func init() { + ioc.Controller().Registry(&HelloServiceServer{}) +} + +type HelloServiceServer struct { + service.UnimplementedHelloServiceServer + ioc.ObjectImpl +} + +func (s *HelloServiceServer) Name() string { + return "hello" +} + +func (s *HelloServiceServer) Init() error { + // 需要拿到全局的 grpc server对象, ioc + service.RegisterHelloServiceServer(grpc_server.Get().Server(), &HelloServiceServer{}) + return nil +} + +func (HelloServiceServer) Hello(ctx context.Context, req *service.HelloRequest) (*service.HelloResponse, error) { + return &service.HelloResponse{ + Message: "hello, " + req.MyName, + }, nil +} + +func (HelloServiceServer) Chat(stream grpc.BidiStreamingServer[service.ChatRequest, service.ChatResponse]) error { + // 1. 获取用户的请求,然后处理, 处理完成后,通过stream 返回给客户端 + for { + // 接收一个请求 + req, err := stream.Recv() + if err != nil { + // 如果遇到io.EOF表示客户端流被关闭 + if err == io.EOF { + return nil + } + return err + } + + // 2. 处理请求 + fmt.Println(req.Message) + stream.Send(&service.ChatResponse{ + Id: req.Id, + IsSuccess: true, + }) + } +} diff --git a/skills/grpc/mcube/main.go b/skills/grpc/mcube/main.go new file mode 100644 index 0000000..131078a --- /dev/null +++ b/skills/grpc/mcube/main.go @@ -0,0 +1,26 @@ +package main + +import ( + "net" + + "github.com/infraboard/mcube/v2/ioc" + grpc_server "github.com/infraboard/mcube/v2/ioc/config/grpc" + + _ "gitlab.com/go-course-project/go17/skills/grpc/mcube/apps/hello" +) + +func main() { + // ioc 的初始化 + ioc.DevelopmentSetup() + + server := grpc_server.Get().Server() + + // 2. 启动grpc服务 + lis, err := net.Listen("tcp", ":1234") + if err != nil { + panic(err) + } + if err := server.Serve(lis); err != nil { + panic(err) + } +} diff --git a/skills/grpc/server/main.go b/skills/grpc/server/main.go index 20477f9..134d504 100644 --- a/skills/grpc/server/main.go +++ b/skills/grpc/server/main.go @@ -46,6 +46,10 @@ func main() { // 1. 示例化一个grpc server对象 server := grpc.NewServer() service.RegisterHelloServiceServer(server, &HelloServiceServer{}) + // service.RegisterHelloServiceServer(server, svc1) + // service.RegisterHelloServiceServer(server, svc2) + // 全部托管到IOC + // Init=> service.RegisterHelloServiceServer(server, &HelloServiceServer{}) // 2. 启动grpc服务 lis, err := net.Listen("tcp", ":1234")