使用命名管道承载gRPC
最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了。 gRPC设计gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架。刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解决所有问题吗?不见得,先看看他的优点: gRPC的主要优点:
对应的适用场景:
gRPC还是有缺点的:
不适用的场景与替代:
目标分析我需要有一个能够实现远程调用的好办法,系统支持Windows就好,最好性能高一些(数据量大),程序小一点,但是我也不想直接处理二进制数据流(最好能有封装的框架)。 考虑进程通信常用的:
首先排除信号/信号量,处理的信息量太小了;然后共享内存也排除,只能单机不符合我的要求;剩下的三个似乎都可以满足要求,可以在这个基础上建立RPC,而gRPC就是建立在socket(HTTP/2)上的,就像上面讲的,要自己集成一个HTTP/2服务器(比如Kestrel)才行,不够轻量化;剩下的两个Windows都有內建支持,可以考虑一下。 本着拿来主义的思想,我在github上找到一个grpc-dotnet-namedpipes,支持在命名管道上实现gRPC,相当于在stream上封装了一层,不用直接处理二进制数据流了。 用作者自己的话来说,这么做相较于普通的gRPC有几个优点:
实现建立一个proto
建立Client新建一个Console程序,添加上面的项目引用,输入以下代码:
添加
建立Server再新建一个Console程序,添加上面的项目引用,也添加那个nuget依赖和一些别的依赖,输入以下代码:
然后运行就能看见熟悉的Hello World了,用起来和gRPC的标准实现没太大区别。 总结完整代码见gRPC_Demo。 这种方式也有它的局限性,首先是Windows的命名管道与Linux上面的实现是不同的,所以并不能实现直接跨平台通讯;然后就是这个对于其他语言的开发的gRPC也不是完全兼容的,需要其他语言开发的程序也做命名管道的适配才行,换言之,它不是通用标准。所以,对于一般的gRPC应用,还是更推荐使用标准实现。 参考
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC中声明性HTML帮助程序
- asp.net – “MVC 3视图”中的当前上下文中不存在
- asp.net-mvc-3 – 在哪里可以找到MvcTextTemplat
- asp.net-mvc-3 – 最初未显示Telerik MVC Grid C
- asp.net-core – 将应用程序root路由到/ swagger
- asp.net-mvc – 在不同的服务器上将ASP.NET Web
- asp.net-mvc – 如何使用需要js的Kendo UI MVC E
- .net – 如何从用户控件中引用母版页内容控件?
- asp.net-mvc-4 – 如何在ASP.NET MVC 4中使用免费
- 离开ASP.NET和SQL SERVER你有什么选择吗?