gRPC入坑记
概要
由于gRPC主要是谷歌开发的,由于一些已知的原因,gRPC跑demo还是不那么顺利的。单独写这一篇,主要是gRPC安装过程中的坑太多了,记录下来让大家少走弯路。
主要的坑:
本文讲解gRPC demo的同时,会介绍如何解决这些坑。本文对应的Github地址:https://github.com/52fhy/grpc-sample 。该仓库存储了demo示例,以及部分系统编译好的二进制包,大家觉得有些步骤里耗时实在太长了,可以直接clone该仓库,复制二进制包到对应目录(仅限测试开发,生产环境还是老老实实自己编译吧)。
升级GCC
gRPC命令行工具编译需要使用 GCC4.8及以上版本。CentOS6系列的内置版本是GCC4.7。
如果你的系统GCC版本>=4.8,可以忽略本节。如果仅使用golang、java,请忽略本节。
如果需要升级gcc至4.8或更高版本,建议直接采用安装SCL源之后安装devtoolset-6(devtoolset-6目前gcc版本为6.3),因为devtoolset-4及之前的版本都已经结束支持,只能通过其他方法安装。
升级到gcc 6.3:
需要注意的是scl命令启用只是 临时 的,退出shell或重启就会恢复原系统gcc版本。如果要长期使用gcc 6.3的话:
这样退出shell重新打开就是新版的gcc了。其它版本同理。
升级到gcc 7.3:
已经停止支持的devtoolset4(gcc 5.2)及之前版本的安装方法,可能比较慢,大家感兴趣的话可以尝试。
编译gRPC命令行工具
gRPC分C、JAVA、GO、NodeJS版本,C版本包括C++, Python, Ruby, Objective-C, PHP, C#,这些语言都是基于C版本开发的,共用代码库一个代码库。
如果使用C版本的gRPC,最终要从源码里编译出下列工具:
这些工具作为插件供proto编译器使用。需要先下载 grpc/grpc github上的源码。
这里有2个坑:
1、grpc/grpc仓库比较大,鉴于国内访问的网速,建议使用国内镜像。码云(https://gitee.com)提供了同步更新的镜像地址:
这样下载速度提高了不少。
2、git submodule update这个命令实际就是在下载.gitmodules文件里定义的第三方依赖项到third_party目录,这个依赖项有很多,大家可以打开.gitmodules文件查看下详情。依赖的仓库都在github上,下载没几个小时是下载不下来的,就等着慢慢下载吧。
回头想想,我们花费了很多时间,结果只是为了得到grpc的proto编译插件。
PHP相关支持
PHP暂时不支持作为grpc的服务端。作为客户端是可以的,需要机器安装:
其中protoc和protobuf c扩展已经在 Protobuf 小试牛刀 介绍过了,这里不再赘述。上一小节里如果安装成功,那么grpc_php_plugin也是有了的。下面介绍如何安装PHP版的gRPC库。
安装grpc c扩展:
要求:GCC编译器需要4.8及以上版本。可以使用pecl安装:
也可以指定版本:
或者下载源码(http://pecl.php.net/package/grpc)安装:
grpc/grpc代码库里也有PHP扩展的C源码,在grpc/src/php/ext/grpc目录,进去也可以直接编译。
编译完成后在php.ini里添加,使用php --ri grpc可以查看信息。
安装完C扩展后,还需要使用composer安装grpc的库:
gRPC示例
编写gRPC proto
一共定义了三个文件:
其中 User 作为 Model定义,Response 用于 RPC统一返回定义,GreeterService 则是服务接口定义。
限于篇幅,proto文件详见 https://github.com/52fhy/grpc-sample 仓库的proto目录。
GreeterService.proto文件内容如下:
这里面定义了一个service,相当于定义了一个服务接口,我们把方法名、参数定义好了,后面需要去实现它。由于gRPC不支持PHP作为服务端,这里我们使用Golang作为服务端。
首先需要使用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里定义的依赖(依赖比较多,详情查看:https://github.com/52fhy/grpc-sample/blob/master/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等高版本
http://www.vpser.net/manage/centos-6-upgrade-gcc.html
2、centos 6.x/7.x使用yum升级git版本 - 夜空
https://blog.slogra.com/post-721.html
3、Protobuf 小试牛刀 - 飞鸿影
https://www.cnblogs.com/52fhy/p/11106670.html
(本文完)
我们在日常的工作当中,经常需要向Leader,业务方、Boss或者甲方提交设计方案,而你的方案是否能够打动他们,从而获得宝贵的开发资源和排期,取决于很多情况,其中之一,很重要的就是你的DEMO是否能够给人一种身临其境的体验感受。
而作为视觉设计师、交互设计师、产品经理,限于我们的专业能力并非开发,所以怎样在节约团队开发资源的情况下,独立完成创意的展示,成为了一项核心诉求。
By Dribbble
过去我们会使用AE(Adobe After Effects)进行动效的设计与展示,但它是不可交互的,所以查看者只能静静看着你精心设计的一系列动效,无法参与到整个行为流程中。
macOS中提供的Keynote可以实现简单的交互动效,但那相比我们目前形成习惯的诸多各式各样的动效中呢,简直不值一提。
所以近年来涌现诸多专门用来设计制作交互动效的工具,早一些的有Axure、Pixate,后来的Origami、Hype、Flinto、Principle等等。这些软件相互之间各有优劣,不相伯仲。它们都有一个共同的特性,那就是为了解决创意的设计与展示。笔者作为一名视觉设计师,尝试过Pixate、Flinto、Principle 这几款工具,但都不尽如人意。比如很多想要的效果实现不了,或者编辑起来很麻烦,抑或DEMO体验效果差强人意。
2017年初,由曾经供职过Naver、Google的Tony Kim担任CEO进行开发的交互动效软件 ProtoPie 正式发布,它从开发之初,就明确了自身的交互逻辑思想。
作为一款可交互式的原型动效设计软件,相比于其他软件,ProtoPie有着自身的几个优势:支持更多触发条件,诸如 3D、陀螺仪、声音、震动、设备间交互、变量等等。同时,自带原生中文,支持 macOS、Windows 双平台,这些都是不可多得的。
从界面中我们可以看到,ProtoPie的界面相对还比较简单明了,包括对象+触发+反应(行为)都可以在界面中一目了然。
我们推出了一门课程:《ProtoPie动效原型进阶之路》,全课共12节,总课时1小时40分。通过完整的案例由浅入深,循序渐进地学习ProtoPie,无论你是视觉设计师、交互设计师、产品经理,通过以下课程,都可以完成ProtoPie动效设计的入门学习:
1.ProtoPie 介绍、界面与基本操作
2 – 与Sketch协作
3 – 滚页与滑页
4.对象坐标与热区范围
通过上面4节入门课程,你已经掌握了ProtoPie的基本操作、与Sketch协作时一些注意事项、可以动手创建滚动区域或滑动等简单的交互动效、以及理解了对象坐标与热区范围这一ProtoPie中特有的功能。
在完成了上面的入门课程之后,即可进行接下来的进阶课程:
5. 条件判断
6. 转场与自动加载
7. 播放器与变量
8. 文本输入与表达式
9. 照相机
10. 联动
11. 范围
12. 监听
通过条件判断,制作一个可切换的Switch开关。
通过自动加载,制作元素的自动展示。
通过变量的设置,制作跟随时间变化的播放秒数。
甚至可以调用你的真实相机进行设计。
在完成了入门与进阶的学习后,相信你已经可以将脑海中天马行空的创意制作成真实可体验的DEMO了,还等什么,快动手吧。
为了方便同学们练习,我们将教程中用到的Sketch源文件和ProtoPie源文件上传到了腾讯微云,地址是:
Sketch源文件 https://share.weiyun.com/5S556ll
ProtoPie源文件 https://share.weiyun.com/5EkkbpW
---来自ISUX
然后把ProtoGen整个文件拷贝出来,放到我们的unity开发目录下
把FULL文件夹下的unity .net库拷贝到Asset文件夹下 plugin文件中(如果没有就新建一个)
此时我的目录结构是这样的
在ProtoGen里面新建个文件夹protos用于存放我们的proto文件
在跟Asset同级目录下编写generator.bat脚本,这样子就可以自动帮你生成这些cs文件
[ruby] view plain copy
@echo off
set out_path=%cd%/Assets/Game/Script/protobuf (这一段可以自定义路径,用于存放生成的cs文件)
cd ProtoGen
rem 查找文件
for /R "%cd%" %%i in (*.proto) do echo %%~ni
for /R "%cd%" %%i in (*.proto) do protogen -i:%%i -o:%out_path%/%%~ni.cs
pause
Sketch:Sketch其实UI用的比较多,不过自从Sketch新增原型设计功能以来,还是收获了很多粉丝。这款工具适合做高保真,但只支持Mac,其他系统请绕道。
还有新推出的摹客原型,可以在线完成高保真设计,自带强大的矢量绘图功能和组件编辑能力,还能无缝接入摹客协作,查看标注和图层代码,在线评审,撰写PRD等等。
博主也是第一次安装使用,定义协议文件时发现不知道如何嵌套定义结构了,摸索。
建议直接参考git上的README
原来缺少一个工具libtool,安装:
之后为了保证不出错 ,还需要安装一个工具libsysfs-dev
示例协议文件:
protoc编译出c++的文件
使用时发现:
对于可重复的Layer可以使用add_layers()赋值,但是centrpoint却没有类似set或add的方式赋值。
打开demo.pb.h搜索一下,发现centrpoint只有两个疑似的函数set_allocated_centerpoint()和mutable_centerpoint(),后续查阅发现,这两个函数都能设置centpoint值
两种方式
项目采用dubbo(版本不自带protostuff序列化),接口参数为byte[],这里的byte[]是由应用先用protobuf工具序列化然后再传。传输的数据再几十k到几百k都有
Pixso自带组件变体、自动布局等专业设计工具,支持UI/UX设计和原型播放,一体化完成高保真产品设计,直接拖拽使用自带的设计资源库,还可以将项目中常用的图标、自制组件一键保存,省去大量重复劳动,形成统一视觉规范。利用Pixso设计资源,快速开启原型制作,模拟最终产品形态和交互效果,实现了模拟画笔的特色,提供精细化矢量设计,自由切割线段,连点成面。基于云端协同编辑,Pixso将产品经理、设计师、开发的日常工作连接起来,实现协作更高效,设计更流畅。
想要了解更多关于软件设计原型的相关信息推荐选择Pixso协同设计。Pixso通过内网本地服务器部署,确保团队敏感数据和核心业务数据私有化,直接在原型基础上,快速邀请团队成员开启设计协作,自动生成切图标注,打开浏览器就能获取CSS、iOS、Android代码片段,还能根据团队配置,进行定制化功能开发,自定义管理权限,规避数据泄露风险。
常用的线框图工具
1.Axure
Axure是一款老牌原型设计工具,我们可以直接使用Axure丰富的组件来创建APP或网站的线框图。作为专业的原型设计工具,它也支持将静态的线框图转换为可交互的原型。同时支持多人协作和版本管理。
2.摹客原型
在国内的同类型工具中,只有摹客拥有强大的矢量绘图功能,在进行头脑风暴时,我们可以利用摹客的矢量绘图工具和无边界画布,让灵感创意快速具象化。同时,摹客作为一款强大的高保真设计利器,产品经理和设计师也可以使用摹客快速绘制高保真,轻量设计还可以直接使用摹客交付给开发。
3.Mockplus
Mockplus是一款简洁高效的产品原型工具。它提供了丰富的组件和图标资源,通过拖曳即可快速绘制线框图。同时Mockplus也支持一键导入项目页面和模板,快速搭建基础页面。简单高效,无需学习就能快速上手。
1.Pop (Prototyping on Paper)
POP是一款设计界面的原型工具,适用于iOS和Android平台。借助POP,开发者或设计师只需在纸上简单地描绘出创意或想法,拍下几张草图照片,并将照片按顺序放置,利用链接点描摹出各张图片之间的逻辑关系,就可轻松创建一个动态模型,点击播放即可演示整个模型。追求手绘风格及快速原型的产品经理和设计师(对于短期内使用免费原型工具的人群来说,这也不失为一个好选择)
2.Mockplus
Mockplus是一款简洁高效的免费产品原型工具。它为用户提供丰富的组件和图标资源,通过拖曳即可实现界面设计。支持一键导入项目页面和模板,快速搭建基础页面。软件还支持自定义组件库,数据填充,Sketch导入,拖曳设置交互等特色功能实现快速设计。近期,该工具还推出了团队协作功能,团队成员之间可以查看、编辑、评论项目,帮助用户更好地完成协作设计。适用人群:各阶段的产品经理及UI/UX设计师,追求中低保真,交互效果,快速原型,新手或专业人群皆适宜。
3.Axure
Axure RP是美国Axure Software Solution公司旗舰产品,是一个专业的快速产品原型工具,让负责定义需求和规格、设计功能和界面的专家能够快速创建应用软件或Web网站的线框图、流程图、原型和规格说明文档。作为专业的原型工具,它能快速、高效的创建原型,同时支持多人协作设计和版本控制管理。适用于追求强交互效果及细节产品经理及设计师,需要具有一定经验或较强专业性。
4.Proto.io
Proto.io是一个专门用于移动应用的产品原型工具——可以构建和部署全交互式的移动应用的原型,并且可以模拟出相似的成品。基于Web的在线环境,它可以让你制作流行的 iPhone,iPad,Android 手机以及任何带有屏幕界面的产品原型。并且它可以运行在大多数的浏览器中,并提供了3个重要的接口:dashboard、编辑器以及播放器。擅长于使用Web浏览器的产品经理或设计师。
5.Balsamiq Mockups
Balsamiq Mockups是一款软件工程中快速产品原型工具,可以作为与用户交互的一个界面草图,一旦客户认可也可以作为美工开发HTML的原型使用,特别是在web原型图设计领域有不错的影响力。使用Balsamiq Mockups画出的原型图都是手绘风格的图像,看上去非常美观、清爽。此外,这款工具支持几乎所有的HTML控件原型图,比如按钮(基本按钮、单选按钮等)、文本框、下拉菜单、树形菜单、进度条、多选项卡、颜色控件、表格、Windows窗体等。除此以外,还支持iPhone手机元素原型图。适用人群:需要生成简单原型(草图)的产品经理或设计师。
下面我来分享一些大众款的原型图设计工具,可以根据自己的需求来选择。
1.Axure:发展较早的一款原型设计软件,因而名声较大。无限画布,适合做低保真到中保真度的原型。功能很多,也让学习起来有点难度,网上有很多axure教程就不多说了。本地型软件,可以下载html文档预览,手机预览不方便。
2.墨刀:国产的一款原型设计协作工具,比起axure来非常容易学会,内置组件很多,创建页面跳转也比axure简单太多。因为是一款在线工具,可以云端保存工作,这点确实很便捷。另外,通过分享链接就可以分享原型给别人看了,如果涉及到跟同事对接什么的,选择在线的工具更方便。支持sketch文稿导入和自动标注。个人认为性价比最高。
3.Invision: 可以说目前是国外发展最大的在线原型设计工具,主打“交互原型”和“协作”,支持sketch和ps设计稿导入做交互。近来出的 Invision studio 对标sketch,想满足更惊喜的设计需要。国外一些大牛公司像airbnb和amazon都在用。不过对于国内用户来说会有服务器速度的问题,而且,贵。(土豪公司无视)
4.Marvel: Marvel 也是海外知名度较高的一款原型设计协作工具,支持PS和sketch设计稿导入做交互原型,本身也支持中度保真程度的设计。也有自动标注功能。图片库对接unsplash,这样来自unsplash的很多精美的免费图片可以直接用。价格比Invision稍便宜。
5.POP(Prototyping on Paper):这款比较另类,是给拍照的手画草图直接做交互。操作轻巧简单:先用手机拍下草图原型(存到POP app内);然后开始编辑图片的哪个区域(按钮)链接到什么页面,添加跳转链接热区,就可以在手机上给小伙伴们演示了。内嵌的交互动作 如侧滑、展开、消失等,即可满足一般的动态演示需要。但功能较为简单,对更深的需求无法满足。
6.Proto.io:也是国外的一款手机原型开发平台。支持在大多数的浏览器运行,共享和协作操作方便,可以直接在真实的移动设备上对原型进行测试。拥有较为丰富的UI组件,支持自定义。另外它有不错的用户测试功能,支持视频录制。并且在移动组件时,能够实时在画布看到组件之间的距离。另外由于服务器的原因,有国内用户反应速度有点慢;收费较高,性价比一般吧。