Wang Wei
Wang Wei
> 收到,gRPC-web 和 gRPC-gateway 都在我们的规划之中,不过可能会稍晚一些。 你这边是计划在公司内生产环境使用 Volo 嘛? 我们周围有几个创业团队,我们开始密集地使用gRPC-web,其核心因素是IDL生成代码可以节省掉原来很费时间的接口调试和前后端字段对齐,对开发效率是很好的提升,但是现在gRPC-web的支持还非常少,真正可行的大概有如下几个 1. envoy代理,后面用标准gRPC,这个代理其实很别扭,C++的网关让改造几乎不可行,wasm支持的配置又别扭。 2. tonic,比较好的一个解决方案,本来一直打算用,但是最近他们在经历hyper-1.0的升级,把很多东西搞得不可用,这就导致了我们开始寻找tonic的替代方案,而且深感tonic背后的团队其实还是缓慢而弱小的。 3. armeria,这个是JVM中唯一支持gRPC-web的框架,可以和Spring一起用,但其实也很别扭。 总体,我们认为gRRC-web代表的新型开发流程,可以从本质上解决很多前后端联合调试的疑难杂症,但是google向来喜欢造概念但不喜欢精细化运营打造的风格,导致一个非常好的东西,长期得不到高水准的实现,实在遗憾。我们知道volo是字节的团队在全力维护,所以真心希望字节能带个头,把这个生态建立起来。 其实同时也别排斥一些其他公司做的不错的东西,比如阿里的nacos,整个dubbo3生态里面最有价值的就是这个东西。volo是我翻代码看到的rust最优秀的实现,但是在分布式上,建议兼容nacos。 我们能够设想的最理想的开发状态为: 1. 一个支持gRPC-web的框架,让前后端能够火速连接,无痛调试 2. 一个支持nacos的分布式框架,让后端之间无痛,尤其建议看看他们的r-nacos,那里有一个很优秀的rust实现,内置了分布式存储。 tonic的gRPC-web支持其实不错,但整个框架的质量一般,AFIT和RPITIT发布都很久了,那边还不知道如何融入到项目中去,甚至连个基本的提案和思路都没有,阿里的dubbo-rust不用看,做得很一般,但他们的那个r-nacos确实还不错,建议考虑兼容。
gRPC-web的实现方案可能不需要特别复杂,核心就2个点 1. header正确处理掉,这个写一个middleware就可以拦截gRPC-web相关请求并修改header 2. 转换request body和response body,因为hyper的Body现在是一个trait了,所以设计一个GrpcWebRequest和GrpcWebRequest并实现Body的trait就可以了。具体实现可以参考tonic,代码并不复杂
有进展吗
> 抱歉,这两周确实有些忙,我们争取下周内支持上 不过看你们回issue的速度,还是真的在蛮用心经营这个项目,希望越来越好,我自己有空的时候,也可以尽一些绵薄之力。
建议先发布出来: 1. 代码不用一次追求完美,总还是可能迭代的,另外cors看你考虑没有,一般都需要的,很多时候grpc端口和正常的http服务端口并不一致,所以一般都有cors跨域支持 2. 建议补充文档和example 3. 建议去https://github.com/grpc/grpc-web里面提一个readme.md的PR,就说支持grpc-web的框架多了一个volo,因为多数接触grpc-web的开发者是从这个项目开始探索的
> @jqiris @thegenius 有什么建议吗?已经开发完成了,目前是仅支持 grpc-web server 另外仅支持grpc-web server,是指不能同时开启普通http服务吗?
怎么样,准备发布出来了吗
> @jqiris hello,你说的不成熟具体指的是哪块呀? 其实都是希望技术完全成熟了,才开始使用,不踩任何坑。 但是对公司的项目,个人的项目,创业的项目,可能是有不同策略的: 1. 公司项目,尽量成熟,有坑不至于被骂 2. 个人项目,尽量用新的,学东西是可能主要目标 3. 创业项目,有坑不要紧,使用新的技术如果能带来领先优势,就先用
还有就是很多人估计不清楚为什么很多接触过envoy的就极度不喜欢envoy,是因为那玩意儿确实不是人读的,yaml加上缩进就是噩梦,给大家一个例子看看: ```yaml static_resources: listeners: - name: listener_0 address: socket_address: address: 0.0.0.0 port_value: 8080 filter_chains: - filters: - name: envoy.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager stat_prefix: ingress_http codec_type: AUTO http_filters: - name: envoy.filters.http.cors...
而且envoy那帮人极度喜欢增加增加和调整参数结构,他们理所当然地认为所有人都应该陪着他们一起修改配置文件和升级系统, 你写好一份配置是1.29的,过两天发布个1.30,不好意思,重新研究重新写,因为他们的参数结构和层级命名都可能变了,你翻遍文档去找到要怎么改,有时候还会告诉你有个特性不支持了。