在 gRPC 中,无选择符服务(unary service)是最常见的一种服务类型。无选择符服务指的是接收一个请求并返回单个响应的服务。
以下是一个简单的无选择符服务示例:
package main
import (
"context"
"log"
"net"
pb "path/to/your/protobuf/file" // 导入定义好的 proto 文件
"google.golang.org/grpc"
)
type server struct{}
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}
func main() {
lis, err := net.Listen("tcp", ":8080")
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)
}
}
以上代码定义了一个名为 SayHello 的方法,该方法接收一个 HelloRequest 类型的参数,并返回一个 HelloReply 类型的响应。这个方法将被注册为无选择符服务。
在客户端中调用此无选择符服务时,需要使用相同名称和参数类型调用这个方法,如下所示:
resp, err := client.SayHello(context.Background(), &pb.HelloRequest{Name: "World"})
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Greeting: %s", resp.Message)
以上代码创建了一个 HelloRequest 请求,并将其发送到无选择符服务的 SayHello 方法中。最终,客户端将收到一个包含响应信息的 HelloReply 对象。
请注意,在上述示例中,我们使用了 Protocol Buffers 语言来定义请求和响应类型。如果您不熟悉该语言,请参阅 Protocol Buffers 官方文档以获取更多信息。




