63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package main
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"io"
|
||
"net"
|
||
|
||
"gitlab.com/go-course-project/go17/skills/grpc/service"
|
||
"google.golang.org/grpc"
|
||
)
|
||
|
||
type HelloServiceServer struct {
|
||
service.UnimplementedHelloServiceServer
|
||
}
|
||
|
||
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,
|
||
})
|
||
}
|
||
}
|
||
|
||
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")
|
||
if err != nil {
|
||
panic(err)
|
||
}
|
||
if err := server.Serve(lis); err != nil {
|
||
panic(err)
|
||
}
|
||
}
|