67 lines
1.3 KiB
Go
Raw Normal View History

2025-08-24 11:35:52 +08:00
package main
2025-08-24 14:14:55 +08:00
import (
"context"
"fmt"
2025-08-24 14:34:22 +08:00
"io"
2025-08-24 14:14:55 +08:00
"log"
2025-08-24 14:34:22 +08:00
"time"
2025-08-24 14:14:55 +08:00
"122.51.31.227/go-course/go18/skills/rpc/protobuf/hello_service"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
2025-08-24 11:35:52 +08:00
func main() {
2025-08-24 14:14:55 +08:00
// grpc.Dial负责和gRPC服务建立链接
2025-08-24 14:51:13 +08:00
conn, err := grpc.NewClient("localhost:1234",
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithPerRPCCredentials(hello_service.NewClientAuthentication(
"admin",
"123456",
)))
2025-08-24 14:14:55 +08:00
if err != nil {
log.Fatal(err)
}
defer conn.Close()
2025-08-24 11:35:52 +08:00
2025-08-24 14:14:55 +08:00
// 使用SDK调用远程函数
helloServiceClient := hello_service.NewHelloServiceClient(conn)
resp, err := helloServiceClient.Hello(context.Background(), &hello_service.Request{
Value: "bob",
})
if err != nil {
panic(err)
}
fmt.Println(resp.Value)
2025-08-24 14:34:22 +08:00
stream, err := helloServiceClient.Channel(context.Background())
if err != nil {
panic(err)
}
// 首先是向服务端发送数据
go func() {
count := 1
for {
if err := stream.Send(&hello_service.Request{Value: fmt.Sprintf("[%d] hi", count)}); err != nil {
log.Fatal(err)
}
count++
time.Sleep(time.Second)
}
}()
// 然后在循环中接收服务端返回的数据
for {
reply, err := stream.Recv()
if err != nil {
if err == io.EOF {
break
}
log.Fatal(err)
}
fmt.Println(reply.GetValue())
}
2025-08-24 11:35:52 +08:00
}