带有 HTTP 回调的异步 RPC
Posted
技术标签:
【中文标题】带有 HTTP 回调的异步 RPC【英文标题】:Async RPC with callback over HTTP 【发布时间】:2016-04-22 08:21:16 【问题描述】:我正在设计一个具有阻塞功能的 SDK(在 Golang 中),它应该异步运行并通过回调返回结果。
我一直在使用 Gorilla Toolkit RPC library,这很棒,但我没有看到返回异步调用值的方法。
也许我遗漏了一些东西并且 RPC 模型不支持异步调用,我的意思是所有调用都是阻塞的,即使是很长时间。如果是这种情况,我假设没有 HTTP 超时?
如何实现异步 RPC 调用,并通过回调返回返回值。
澄清:我不能使用典型的 Go Channel 方法进行回调,因为我将通过 HTTP 从另一种语言调用 RPC。所以我的问题是,有没有办法在进行 RPC 时通过 HTTP 实现回调,或者调用是否应该阻塞,即使很长一段时间,直到一个值准备好返回?
【问题讨论】:
【参考方案1】:我不知道 Gorilla,但是在 Go 标准库的 net/rpc 包中,你会发现这个方法 net/rpc/Go。它异步进行 RPC 调用,你给它一个通道作为参数,这样你就可以在远程过程调用完成时检索 RPC 回复。
net/rpc/Call 也进行 RPC 调用,但在调用完成之前一直处于阻塞状态。如果您知道如何使用通道,我相信您会通过 Go 方法得到您想要的。
【讨论】:
谢谢。我的问题是我将从其他平台(Java、Python 等)进行 RPC 调用,因此需要知道如何通过 HTTP 进行回调。或者调用只是阻塞直到返回值?【参考方案2】:你可以看看grpc。这个:
有一个native go implementation 对于“等”的大多数值都有“Java、Python 等”的实现 通过 HTTP2 工作(好吧,不完全是 http,但非常相似) 完全是asynchronous(示例恰好是C++)。【讨论】:
有趣,你能告诉我它是如何回调的吗?这是 HTTP2 的特性吗? 我不是grpc
的专家,但我认为它正在做的是维护单个(或小池)HTTP2 连接,通过它可以同时发出多个请求。当每个请求返回回复时,它会触发回调。 IE 的异步特性是“同时运行多个请求”和一个不错的库的产物,而不是真正的服务器->客户端通知。
嗯,好吧,听起来很有趣。我想知道 Gorilla 工具包的操作是否类似。我会进一步调查,谢谢。以上是关于带有 HTTP 回调的异步 RPC的主要内容,如果未能解决你的问题,请参考以下文章