# grpc_gateway_demo **Repository Path**: xiaokang69/grpc_gateway_demo ## Basic Information - **Project Name**: grpc_gateway_demo - **Description**: 这个项目是根据grpc-gateway官方文档中改编的例子 官方文档中的例子中只能接受HTTP的请求,没有做GRPC的处理 改的Demo中 ** 添加了对GRPC的处理 ** - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: https://www.asdasd.cn - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-10-16 - **Last Updated**: 2023-03-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 这个项目是根据grpc-gateway官方文档中改编的例子 > grpc-gateway官方文档 https://github.com/grpc-ecosystem/grpc-gateway 官方文档中的例子中只能接受HTTP的请求,没有做GRPC的处理 改的Demo中 **添加了对GRPC的处理** --- #### 启动 grpc-gateway ``` go run main ``` #### http 方式访问 ``` curl --location --request POST 'http://localhost:8081/v1/example/echo' \ --header 'Content-Type: application/json' \ --data-raw '{ "value": "ccccc" }' ``` #### prc 方式访问 ``` go run client.go ``` # 生成proto 和 grpc 的命令 ``` protoc -I . --go_out ./gen/go --go_opt paths=source_relative --go-grpc_out require_unimplemented_servers=false:./gen/go --go-grpc_opt paths=source_relative your/service/v1/your_service.proto ``` ### 这里的坑点是生成 `gw.go` 的命令 - protoc -I . --grpc-gateway_out ./gen/go --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative your/service/v1/your_service.proto - protoc -I . --grpc-gateway_out ./gen/go --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt generate_unbound_methods=true your/service/v1/your_service.proto > 多了个 generate_unbound_methods=true 看单词意思是生成不受约束的请求模式, 感觉兼容性更好 推荐用这个 - protoc -I . --grpc-gateway_out ./gen/go --grpc-gateway_opt logtostderr=true --grpc-gateway_opt paths=source_relative --grpc-gateway_opt grpc_api_configuration=buf.gen.yaml --grpc-gateway_opt standalone=true your/service/v1/your_service.proto > 这个命令 extV1 "gateway_demo/gen/go/your/service/v1" 这里会报错 ,循环引用包的错误 ,如果 `grpc.pb.go` 不和 `pb.gw.go` 在同一个目录是可以用的, 不过要设置好 `.proto` 的 `option go_package = "gateway_demo/gen/go/your/service/v1";`