首先需要使用proto工具编译出golang的代码:
执行成功 , 会在 Pb_Go目录里生成Go代码:
如果需要生成PHP客户端的代码 , 则需要使用grpc php的命令行工具grpc_php_plugin,前面小结如果执行成功,这个工具已经有了 。然后:
最终生成的文件:
注意:编译那里如果我们不加--grpc_out=../$out --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin,生成的PHP类是没有GreeterClient的 。这个文件是gRPC编译工具自动生成的,用于连接gRPC服务端 。
go编写服务
我们用Golang写服务端 。上面虽然生成了Golang的部分代码,但真正的服务还没有写呢 。
main.go
首先我们新建个main.go,代码不多,我直接贴出来:
然后就可以编译了 。
有个大坑:go build main.go的时候会先下载go.mod里定义的依赖(依赖比较多,详情查看:),其中下面这条非常慢,仓库太大了 , 虽然重定向到github:
为了快速下载,我在码云上做了镜像,地址:gitee.com/52fhy/google-api-go-client。改了之后下载快多了 。
编译成功后,生成了二进制文件main 。我们可以直接运行:
go test
为了测试我们写的服务是否正常,可以写测试用例:
test_client.go
运行:
运行有点慢 , 感觉依赖的库多了 。
php客户端
使用gRPC PHP客户端,确保你已经安装了:
示例:
client_test.php
运行后输出:
常见问题
1、CentOS6使用 go mod获取第三方依赖包unknown revision xxx错误
解决:其实go mod调用链中会用到一些git指令,当git版本比较旧时,调用失败产生错误,并给出歧义的提示信息 。方法就是升级git版本,CentOS6自带的git是1.7版本 。升级完毕后 , 再尝试go mod 。
快速升级方法:
centos6:
2、PHP报错:Fatal error: Class 'Google\Protobuf\Internal\Message' not found
解决:请安装PHP的protobuf c扩展 。
3、PHP报错:Fatal error: Class '\Grpc\BaseStub' not found
解决:使用composer require grpc/grpc安装grpc 。另外对应的grpc C扩展也要安装 。
4、下载 github release包很慢怎么办?
解决:下载Mac版 Free Download Manager 下载工具可以解决Github 下载缓慢或失败问题 。速度嗖嗖的 。
参考
1、为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本
2、centos 6.x/7.x使用yum升级git版本 - 夜空
3、Protobuf 小试牛刀 - 飞鸿影
(本文完)
GoLang -- gRPC框架四大服务 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端 应用的方法,使得您能够更容易地创建分布式应用和服务 。与许多 RPC 系统类似 , gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型) 。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用 。在客户端拥有一个存根能够像服务端一样的方法 。
gRPC 客户端和服务端可以在多种环境中运行和交互 - 从 google 内部的服务器到你自己的笔记本,并且可以用任何 gRPC 支持的语言来编写 。所以 , 你可以很容易地用 Java 创建一个 gRPC 服务端,用 Go、Python、Ruby 来创建客户端 。此外,Google 最新 API 将有 gRPC 版本的接口,使你很容易地将 Google 的功能集成到你的应用里 。
gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制(当然也可以使用其他数据格式如 JSON) 。名叫 proto3 的新风格的 protocol buffers , 它拥有轻量简化的语法、一些有用的新功能,并且支持更多新语言 。当前针对 Java 和 C++ 发布了 beta 版本,针对 JavaNano(即 Android Java)发布 alpha 版本,在protocol buffers Github 源码库里有 Ruby 支持,在golang/protobuf Github 源码库里还有针对 Go 语言的生成器,对更多语言的支持正在开发中 。
推荐阅读
- 3d二战即时战略单机游戏,3d二战游戏大全
- python新建多个变量,python生成多个变量
- 网络空间防护专业毕业设计,网络空间安全管理防护
- 网络直播软件有哪些,网络直播软件有哪些好用
- vb.net< vbnet还有人用吗
- 如何做一个小型网络营销,怎么去做一个具体方案的网络营销策划?
- 绝地求生进游戏变成慢动作,绝地求生慢动作怎么回事
- 欢乐城堡的冒险游戏,欢乐城堡在哪
- c语言标准函数的效率 c++标准函数