通过 HTTP 转到 JSON RPC v2
Posted
技术标签:
【中文标题】通过 HTTP 转到 JSON RPC v2【英文标题】:Go JSON RPC v2 over HTTP 【发布时间】:2014-09-24 08:53:11 【问题描述】:Go 世界中有没有实现 JSON RPC 2.0 (HTTP) 的项目,尤其是批量查询的特性?
一些背景知识,我知道有一个 Go 内置的,但它不是通过 HTTP 的,而且 Gorilla 看起来支持 V2(在 v2 文件夹中,但我找不到它的文档),但正如我测试的那样它响应像“[valid_request...,valid_request...]”这样的组合请求的空结果。也许它还没有实施批处理。 (我是否遗漏了什么来做对?)
【问题讨论】:
请参阅gorillatoolkit.org/pkg/rpc/json#overview。上次我查看时,Gorilla 只是 JSON-RPC v1。我目前还不知道 Go 的 v2 客户端,但希望其他人会知道。 是的,但是在代码库中的“gorilla/rpc”下有一个名为“v2”的文件夹。我做了一些测试,发现这个编解码器在请求中需要一个额外的字段“jsonrpc”:“2.0”才能工作,params字段中的“[...]”也消失了..但是我没有找到任何关于的逻辑批量查询。一个好处是代码不复杂,可以自己添加批处理。 如果您设法添加批处理,请向 Gorilla 团队发送拉取请求,以防他们想要合并您的更改。 是的,我设法让批处理工作。以我的方式,我需要修改那些基本接口以将批处理查询视为默认情况,并将单个查询视为普通批处理查询的特殊情况。变化有点太大了。我不知道 Gorilla 团队是否真的感兴趣。此外,还有一些生产阈值控制尚未完成,例如限制一批最大查询等。 【参考方案1】:由于我目前找不到对 JsonRpc 2.0 的现成 Go 服务器支持,我修改了 gorilla JsonRPC 2.0 以支持批处理查询。分叉的仓库位于 https://github.com/jason-xxl/rpc 。只需将导入路径从“gorilla/rpc/v2”更改为“jason-xxl/rpc/v2_batch”即可获得可测试的批处理查询启用服务器。 (如果我错过了已经支持 2.0 批处理的任何一个,请告诉我。)
【讨论】:
谢谢杰森!您的工作是否已合并回 gorilla/rpc/v2?还是我应该继续去拿你的叉子? 嗨,我没有撤回请求,因为它更适合我们的用例(尚未完全测试覆盖),更重要的是,在生产中,您需要设置允许的最大子请求的阈值单个父请求,否则您的服务器很容易被有效的巨大请求关闭。但是代码显示了您可以参考的可能实现。以上是关于通过 HTTP 转到 JSON RPC v2的主要内容,如果未能解决你的问题,请参考以下文章