请求。
grpcServer := grpc.NewServer()
// 注册服务
helloservice.RegisterHelloServiceServer(grpcServer, new(helloservice.HelloService))
// 开启一个tcp监听
listen, err := net.Listen("tcp", ":1234")
if err != nil {
log.Fatal(err)
}
log.Println("server started...")
// 在监听器 listen 上接受传入的连接,创建一个新的ServerTransport 和 service goroutine。 服务 goroutine读取 gRPC 请求,然后调用注册的处理程序来回复它们。
log.Fatal(grpcServer.Serve(listen))
}
然后我们启动下看下效果
go run helloservice/main/main.go
2022/10/13 23:07:46 server started...
4、grpc客户端
接着我们编写客户端的代码helloclient/main.go
package main
import (
"context"
"fmt"
"google.golang.org/grpc"
"grpcdemo/helloservice"
"io"
"log"
"time"
)
func main() {
// 连接grpc服务端
conn, err := grpc.Dial("localhost:1234", grpc.WithInsecure())
if err != nil {
log.Fatal(err)
}
defer conn.Close()
// 一元rpc
unaryRpc(conn)
// 流式rpc
streamRpc(conn)
}
func unaryRpc(conn *grpc.ClientConn) {
// 创建grpc客户端
client := helloservice.NewHelloServiceClient(conn)
// 发送请求
reply, err := client.Hello(context.Background(), &helloservice.String{Value: "hello"})
if err != nil {
log.Fatal(err)
}
log.Println("unaryRpc recv: ", reply.Value)
}
func streamRpc(conn *grpc.ClientConn) {
// 创建grpc客户端
client := helloservice.NewHelloServiceClient(conn)
// 生成ClientStream
stream, err := client.Channel(context.Background())
if err != nil {
log.Fatal(err)
}
go func() {
for {
// 发送消息
if err := stream.Send(&helloservice.String{Value: "hi"}); err != nil {
log.Fatal(err)
}
time.Sleep(time.Second)
}
}()
for {
// 接收消息
recv, err := stream.Recv()
if err != nil {
if err == io.EOF {
break
}
log.Fatal(err)
}
fmt.Println("streamRpc recv: ", recv.Value)
}
}