Java白深

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

Day1 环境安装和配置

1.先去github上下载对应版本的protocol ,使用github镜像网站,避免FQ

网址:https://hub.yzuu.cf/protocolbuffers/protobuf/releases

下载好后,解压到相应目录,将bin文件的地址添加到环境变量的path中,最后在cmd中使用protoc测试。出现以下内容则安装成功

 2.下载安装GRPC核心库

在项目中打开terminal,输入go get google.golang.org/grpc即可

配合各个语言的代码生成工具,对于Golang来说称为potoc-gen-go需要安装两个库:

go install google.golang/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

GOBIN must be an absolute path 报错解决办法

使用go env 查看环境变量GOBIN到底是多少

 将该路径改为GOPATH下面的bin路径即可

编写protobuf文件

1.新建proto文件,在文件中创建以  .proto结尾的文件

复制代码
syntax = "proto3"; // 指定proto版本
package hello_grpc;     // 指定默认包名

// 指定golang包名
option go_package = "/hello_grpc";

//定义rpc服务
service HelloService {
  // 定义函数
  rpc SayHello (HelloRequest) returns (HelloResponse) {}
}

// HelloRequest 请求内容
message HelloRequest {
  string name = 1;
  string message = 2;
}

// HelloResponse 响应内容
message HelloResponse{
  string name = 1;
  string message = 2;
}
复制代码

2.然后切换至proto文件的目录下执行命令

protoc --go_out=. hello.proto(文件名)

protoc --go-grpc_out=. hello.proto(文件名)

生成两个go文件

客户端

复制代码
package main

import (
    pb "GRPC_study/server/protoc"
    "context"
    "fmt"
    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials/insecure"
    "log"
)
func main() {
    addr := ":8080"
    //使用grpc.Dial创建一个到指定地址的grpc连接
    //此处使用不安全的证书来实现SSL//TLS连接
    conn, err := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))
    if err != nil {
        log.Fatal(fmt.Sprintf("grpc connect addr [%s] 连接失败 %s", addr, err))
    }
    defer conn.Close()
    //初始化客户端
    client := pb.NewSayHelloClient(conn)
    //客户端调用方法
    result, err := client.SayHello(context.Background(), &pb.HelloRequest{
        Name:    "张三",
        Message: "你好我是张三",
    })
    fmt.Println(result)
}
复制代码

服务端

复制代码
package main

import (
    "context"
    "fmt"
    "google.golang.org/grpc"
    "google.golang.org/grpc/grpclog"
    "net"
)
import pb "GRPC_study/server/protoc"

// HelloServer1 得有一个结构体,需要实现这个服务的全部方法,叫什么名字不重要
type HelloServer1 struct {
    pb.UnimplementedSayHelloServer
}

func (HelloServer1) SayHello(ctx context.Context, request *pb.HelloRequest) (pd *pb.HelloResponse, err error) {
    fmt.Println("入参:", request.Name, request.Message)
    pd = new(pb.HelloResponse)
    pd.Name = "你好"
    pd.Message = "我这边收到了"
    return
}
func main() {
    //监听端口
    listen, err := net.Listen("tcp", ":8080")
    if err != nil {
        grpclog.Fatal("Failed to listen: ", err)
    }
    //创建一个grpc服务器实例
    s := grpc.NewServer()
    server := HelloServer1{}
    //将server结构体注册为grpc服务
    pb.RegisterSayHelloServer(s, &server)
    fmt.Println("grpc server running : 8080")
    //开始处理客户端请求
    err = s.Serve(listen)
}
复制代码

 

posted on   DengSr  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
 
点击右上角即可分享
微信分享提示