首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用gRPC从服务器到客户端执行RPC请求?

是否可以使用gRPC从服务器到客户端执行RPC请求?
EN

Stack Overflow用户
提问于 2018-11-01 09:58:17
回答 3查看 5.5K关注 0票数 3

前言:

我以前没有用过gRPC。我只是对这项技术进行了初步的观察,并试图了解我是否可以在我的项目中使用它。我使用的是NetCore2.1的C#,如果它对某些事情很重要的话。

问题:

我有一个服务器和多个客户机,我需要从服务器到客户机执行RPC请求。有gRPC的吗?如果是的话,我怎么能做到呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-12 07:29:45

来自https://groups.google.com/forum/#!topic/grpc-io/wAF9T0nQcH0的回答

的作者:乔什汉弗莱斯(乔希,如果你要读这个话题,请在这里张贴你的答案,我会接受它,并将删除我的副本)

您可以使用双向流,其中服务器在流上发送的每条消息都将有来自客户端的一条消息作为回复。实际的请求类型和响应类型都可以有一个:响应消息对于每个实际的RPC操作(以及它的请求类型)都有一个选项;请求消息(由客户机发送)实际上将定义响应类型。您可以在服务器反射服务中看到类似的示例。但是,这是一种正常的从客户机到服务器的RPC。您只需交换请求和响应类型(并让服务器首先发送“响应”消息,并获得响应中的“请求”来启动请求)。

对于优雅的拆卸,服务器只需停止使用流发送请求,等待对所有未完成操作的答复,然后关闭流/终止RPC。当客户端关闭时,它可能停止接受来自服务器的消息(在每个服务器收到消息后,按照“关闭”的方式发送立即的错误消息)。

如果您希望支持无序执行(例如,客户端答复可以以与接收到的服务器请求不同的顺序发送),则请求和响应模式将需要一个带有某种请求ID的信封,以便将答复与其原始请求关联起来。

旁白:我一直在研究一些您可能认为有用的东西--一种用于隧道gRPC的通用机制。隧道是通过提供与低级别gRPC传输相同功能的gRPC服务来设置的。有一些有趣的用例,但是服务器对客户端的用例是最有趣的。如果你好奇的话,你可以四处看看正在进行的工作:https://github.com/jhump/grpctunnel。(不幸的是,我不知道什么时候才能真正完成这个库,但是它可能有一些有趣的想法/代码可以使用。)

票数 3
EN

Stack Overflow用户

发布于 2018-11-07 15:27:33

服务器发起的请求并不是gRPC的第一类特性,但是这种PRR拓图在流语义中始终是可能的。

例如,流将是:

1)所有客户端都与服务器建立长寿命流RPCs。

2)服务器现在可以在这些流上向每个客户端发送消息,就好像每条消息都是单独的RPC一样。

票数 4
EN

Stack Overflow用户

发布于 2018-11-08 11:17:39

使用gRPC,服务器无法启动与客户端的联系。但是,客户端可以向服务器发送初始rpc,然后等待它们的响应,直到服务器拥有所需的资源,如下所示:

代码语言:javascript
复制
using (var call = client.InitialContact(clientID))
{
    var responseStream = call.ResponseStream;
    while (await responseStream.MoveNext()){
        //do something if there is a response
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53098915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档