# grpc **Repository Path**: zxsz4084/grpc ## Basic Information - **Project Name**: grpc - **Description**: 学习grpc - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-09 - **Last Updated**: 2022-04-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: Grpc ## README ## 运行本示例 ``` cd gRPC 进入当前目录 go mod tidy go run server.go go run client.go ``` ## 学习文档 - https://grpc.io/docs/languages/go/quickstart/ - - https://pan.baidu.com/play/video#/video?path=%2FAGO%E8%A7%A3%E5%8E%8B%2F201-242%2F201-242%2F212.212%20gRPC.mp4&t=-1 - - https://pan.baidu.com/play/video#/video?path=%2FAGO%E8%A7%A3%E5%8E%8B%2F201-242%2F201-242%2F213.213%20gRPC%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%9C%8D%E5%8A%A1%E7%AB%AF.mp4&t=-1 - ### 百度视频中不一样的 ``` // protoc-gen-go 版本大于1.4.0, proto文件需要加上go_package,否则无法生成 在proto目录下执行: protoc -I . --go_out=plugins=grpc:. ./user.proto 报错: protoc-gen-go: unable to determine Go import path for "user.proto" Please specify either: • a "go_package" option in the .proto source file, or • a "M" argument on the command line. ``` ## 生成类属性等描述文件 ``` cmd proto pwd /Users/chenlong/GoAd/src/gRPC/proto protoc -I . --go_out=. --go_opt=paths=source_relative ./user.proto 生成文件 src/gRPC/proto/user.pb.go ``` ``` 在gRPC目录 cd .. pwd /Users/chenlong/GoAd/src/gRPC -I 相当于 --proto_path protoc --proto_path=proto --go_out=proto --go_opt=paths=source_relative proto/user.proto ``` ## 生成类文件和grpc调用方法 ``` 其他项目的命令, cd proto protoc --proto_path=. \ --go_out=. --go_opt=paths=source_relative \ --go-grpc_out=. --go-grpc_opt=paths=source_relative \ --gw2grpc_out=. --gw2grpc_opt=paths=source_relative \ --grpc-gateway_out=. --grpc-gateway_opt=paths=source_relative \ ./user.proto 过时了? --gw2grpc_out xx.pb.gw2grpc.go --grpc-gateway_out xx_pb.gw.go ``` ### 例子文件用此命令生成: ``` cd proto protoc --proto_path=. \ --go_out=. --go_opt=paths=source_relative \ --go-grpc_out=. --go-grpc_opt=paths=source_relative \ ./user.proto ``` ### 混乱 网上好多这样的命令不好使,老版本的? ``` protoc --go_out=plugins=grpc:. *.proto ``` ``` protoc命令的语法: protoc -I /PATH/TO/.proto_DIR/ /PATH/TO/TARGET.proto --go_out=plugins=grpc:/PATH/TO/OUTPUT_DIR #不指定-I表示从当前工作目录寻找.proto文件。-I一般是指向项目根目录。 #本例编译.proto文件使用下面的命令(需要cd到.proto文件所在目录,再执行) protoc non_stream.proto --go_out=plugins=grpc:. #执行完这条命令后,就可以在当前目录下看到non_stream.pb.go源码文件了。 #命令中:后面的.表示当前目录,加入要生成代码到/tmp目录,则使用选项--go-out=plugins=grpc:/tmp ``` ## gateway转发到grpc服务 要-I指定好路径 在proto目录下: ``` protoc -I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/pkg/mod/github.com/grpc-ecosystem/grpc-gateway\@v1.16.0/third_party/googleapis \ --go_out=. --go_opt=paths=source_relative \ --go-grpc_out=. --go-grpc_opt=paths=source_relative \ --grpc-gateway_out=. --grpc-gateway_opt=paths=source_relative \ ./gw.proto ``` ``` go run gw2rpc/dogServerRPC.go go run gw2rpc/dogServerHttp.go 测试2个服务 go run gw2rpc/dogClient.go http还可以通过浏览器测试 http://localhost:8080/v1/dog/zs http://localhost:8080/v1/dog/zs2 ``` ## 解决gland不能识别google/api/xx的问题 ``` cp -r /Users/chenlong/GoWork/pkg/mod/github.com/grpc-ecosystem/grpc-gateway@v1.16.0/third_party/googleapis/google/ api和rpc都copy到了 goland预设的路径 设置preferences - Language and Frameworks - Protocol Buffers 的路径 /Users/chenlong/Library/Caches/JetBrains/GoLand2021.3/protoeditor 好像编辑器还是没识别到 ??? 又发现protoc 文件夹下面有 include/google/protobuf 也有 descriptor.proto等文件 把proto 直接copy 到 /Users/chenlong/Documents/protoc/include 把 上面的 api和rpc目录 也copy到 /Users/chenlong/Documents/protoc/include/google下 google目录下3个文件夹 protobuf api rpc ```