Go:grpc
2024-09-25 13:52:03
一、grpc安装
将 https://github.com/google/go-genproto 修改文件名放到 $GOPATH/src/google.golang.org/genproto
将 https://github.com/grpc/grpc-go 修改文件名放到 $GOPATH/src/google.golang.org/grpc
将 https://github.com/golang/text 放到 $GOPATH/src/golang.org/x/text
将 https://github.com/golang/net 放到 $GOPATH/src/golang.org/x/net 然后
cd $GOPATH/src/
go install google.golang.org/grpc
PS:protobuf的安装不做介绍。
二、grpc的helloworld示例
服务端:
package main import (
"context"
"log"
"net" "google.golang.org/grpc"
pb "google.golang.org/grpc/examples/helloworld/helloworld"
) const (
PORT = ":8080"
) type server struct{} // SayHello实现了helloworld.pb.go中的GreeterServer接口
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
log.Printf("Received: %v", in.Name)
return &pb.HelloReply{Message: "Hello " + in.Name}, nil
} func main() {
// 监听
lis, err := net.Listen("tcp", PORT)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
// new服务对象
s := grpc.NewServer()
// 注册服务
pb.RegisterGreeterServer(s, &server{})
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
客户端:
package main import (
"context"
"log"
"time" "google.golang.org/grpc"
pb "google.golang.org/grpc/examples/helloworld/helloworld"
) const (
ADDR = "localhost:8080"
NAME = "World"
) func main() {
// 建立与服务器的连接
conn, err := grpc.Dial(ADDR, grpc.WithInsecure())
if err != nil {
log.Fatalf("连接失败: %v", err)
}
defer conn.Close() // 调用proto的函数创建客户端连接句柄
c := pb.NewGreeterClient(conn) ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel() // 调用proto的SayHello函数
r, err := c.SayHello(ctx, &pb.HelloRequest{Name: NAME})
if err != nil {
log.Fatalf("调用SayHello失败: %v", err)
}
log.Println(r.Message)
}
最新文章
- 从零开始学Python04作业思路:模拟ATM电子银行
- linux常用命令:4文件压缩和解压命令
- 如何更新Android SDK和Build Tool
- 30天轻松学习javaweb_通过telnet连接http服务器
- NovaMind *的安装、和谐破解到永久使用
- 编写自己的单点登录(SSO)服务
- centos7图形配置 firewall-config
- 201521123121 《Java程序设计》第1周学习总结
- ccd采集
- 项目Alpha冲刺Day12
- Scrum冲刺阶段3
- Python中csv模块解析
- echarts画饼环状饼图相关参数配置
- Flink – Stream Task执行过程
- 解决MySQL忘记root密码
- jquery 获取URL参数并转码的例子
- Windows 下使用 GCC
- Codeforces Round #528 Solution
- python学习笔记(10)--爬虫下载煎蛋图片
- 2018DDCTF Misc部分WP