【问题标题】:Async RPC with callback over HTTP带有 HTTP 回调的异步 RPC
【发布时间】:2016-04-22 08:21:16
【问题描述】:

我正在设计一个具有阻塞功能的 SDK(在 Golang 中),它应该异步运行并通过回调返回结果。

我一直在使用 Gorilla Toolkit RPC library,这很棒,但我没有看到返回异步调用值的方法。

也许我遗漏了一些东西并且 RPC 模型不支持异步调用,我的意思是所有调用都是阻塞的,即使是很长时间。如果是这种情况,我假设没有 HTTP 超时?

如何实现异步 RPC 调用,并通过回调返回返回值。

澄清:我不能使用典型的 Go Channel 方法进行回调,因为我将通过 HTTP 从另一种语言调用 RPC。所以我的问题是,有没有办法在进行 RPC 时通过 HTTP 实现回调,或者调用是否应该阻塞,即使很长一段时间,直到一个值准备好返回?

【问题讨论】:

    标签: http go rpc json-rpc


    【解决方案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 工具包的操作是否类似。我会进一步调查,谢谢。
    猜你喜欢
    • 2018-04-29
    • 2016-10-24
    • 2013-09-12
    • 1970-01-01
    • 2017-03-31
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多