补充grpc逻辑

This commit is contained in:
yumaojun03 2025-03-02 09:57:02 +08:00
parent e9b2a72b15
commit 5597e735fc
4 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,10 @@
package global
import "google.golang.org/grpc"
// 1. 示例化一个grpc server对象
var Server = grpc.NewServer()
func Init() {
}

View File

@ -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,
})
}
}

26
skills/grpc/mcube/main.go Normal file
View File

@ -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)
}
}

View File

@ -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")