go实现grpc通信
【摘要】 准备环境go get google.golang.org/grpcgo get google.golang.org/protobuf复制代码实现新增 chat/chat.proto 文件:syntax = "proto3";package template;option go_package = "../chat";message Message{ string body = 1;}ser...
准备环境
go get google.golang.org/grpc
go get google.golang.org/protobuf
复制
代码实现
新增 chat/chat.proto 文件:
syntax = "proto3";
package template;
option go_package = "../chat";
message Message{
string body = 1;
}
service ChatService{
rpc SayHello(Message) returns (Message){}
rpc BroadcastMessage2(Message) returns (Message) {}
}
复制
命令生成pb.go
protoc --go_out=plugins=grpc:chat ./chat/chat.proto
复制

编写chat 服务文件 chat.go:
package chat
import (
"context"
"log"
)
type Server struct {
}
func (receiver *Server) SayHello(ctx context.Context, in *Message) (*Message, error) {
log.Printf("Receive message body from client: %s", in.Body)
return &Message{Body: "Hello From the Server!"}, nil
}
func (receiver *Server) Test(ctx context.Context, in *Message) (*Message, error) {
log.Printf("test new message from a client: %s", in.Body)
return &Message{Body: "test message!"}, nil
}
复制
编写grpc-server服务端:
package main
import (
"fmt"
"google.golang.org/grpc"
"grpc-study/chat"
"log"
"net"
)
func main() {
fmt.Println("Go gRPC Beginners Tutorial!")
listen, err := net.Listen("tcp", ":9000")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
grpcServer := grpc.NewServer()
s := chat.Server{}
chat.RegisterChatServiceServer(grpcServer, &s)
if err := grpcServer.Serve(listen); err != nil {
log.Fatalf("failed to serve: %s", err)
}
}
复制
grpc-client 客户端调用
package main
import (
"context"
"google.golang.org/grpc"
"grpc-study/chat"
"log"
"time"
)
func main() {
var conn *grpc.ClientConn
conn, err := grpc.Dial(":9000", grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %s \n", err)
}
defer conn.Close()
c := chat.NewChatServiceClient(conn)
for true {
response, err := c.SayHello(context.Background(), &chat.Message{Body: "66666"})
if err != nil {
log.Fatalf("Error when calling SayHello: %s", err)
}
log.Printf("Response from server: %s", response.Body)
broadcastMessage, err := c.Test(context.Background(), &chat.Message{Body: "123"})
if err != nil {
log.Fatalf("Error when calling Broadcast Message: %s", err)
}
log.Printf("Response from server: %s", broadcastMessage.Body)
time.Sleep(1*time.Second)
}
}
复制
启动

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)