golang jsonrpc 调用 java json rpc

     2023-02-16     283

关键词:

【中文标题】golang jsonrpc 调用 java json rpc【英文标题】:golang jsonrpc call java json rpc 【发布时间】:2015-08-21 15:23:34 【问题描述】:

我试图通过 json rpc 将 golang 程序与 java 程序连接起来,但遇到了一些麻烦。我使用 golang 原生包中的“net/rpc/jsonrpc”包,以及 java 中的“jsonrpc4j”。我使用流模式在java中创建服务器,因为golang的jsonrpc只支持tcp调用。但它仍然在golang客户端得到错误响应:

err: 错误映射无效[code:-32602 message:Invalid method parameters]

同时java服务器也遇到错误:

com.fasterxml.jackson.databind.JsonMappingException:由于输入结束,没有要映射的内容 在 [来源:com.googlecode.jsonrpc4j.NoCloseInputStream@385b5b5c;行:1,列:1] 在 com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) 在 com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3747) 在 com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3687) 在 com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2202) 在 com.googlecode.jsonrpc4j.JsonRpcServer.handle(JsonRpcServer.java:224) 在 com.googlecode.jsonrpc4j.StreamServer$Server.run(StreamServer.java:214) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:744)

我不明白为什么它不起作用,jsonrpc协议中是否存在任何golang无法调用java的规则或者我只是没有做对?

【问题讨论】:

我之前尝试过类似的事情,但遇到了死胡同。据我所知,Go rpc 包仅支持 Go 服务器和客户端,不支持其他语言编写的。这是 Golang-Nuts 谷歌组的一个参考:groups.google.com/forum/#!topic/golang-nuts/F0cuNKsH7c4 【参考方案1】:

我希望我有一个更好的答案。这是我试图早点完成但无法实现的事情。我读过只有 Go 客户端可以 rpc 到 Go 服务器。

在尝试让 json/rpc 在 Java 和 Go 之间工作后,我采用了两种方法,也许你可以根据自己的需要定制一些类似的东西。

在一个案例中,我使用了 net/http 包并在 Go 中做了一个基本的 Web 服务器,然后使用 HandlerFunc 来根据 url 请求调用函数/方法。这些请求基于简单的 http 表单操作。然后我重定向回主页,因为我希望“应用程序”留在用户面前,因为我只需要“/submit” url 来触发一个带有从表单传入的值的方法。

不是那么优雅,但它可以在紧要关头快速建立一种收集信息的方式,并且可以通过让我的同事知道我正在监听的端口来立即“部署”。

在第二种情况下,因为我的一个朋友正在编写 Java 端,所以我设置了一个套接字,列出了我们同意的字节模式,它将调用特定的函数。

适应性不太强,但如果你从客户那里得到什么,那效果很好。

【讨论】:

感谢您的回答。你以一种非常聪明的方式解决了问题。但我终于解决了。有3个关键点。首先,golang 的 json-rpc 已经遵守了它的 rpc 的规则,这个函数应该只有一个收益 pramater。其次,java json-rpc中注册的方法名不像golang,只是方法名,不包括类名。第三,保持程序在套接字中通信,而不是 Http。 Here is my demo code if you are intrested,不好意思写成中文,你看代码就行了。

golang http+jsonrpc 从网页访问

】golanghttp+jsonrpc从网页访问【英文标题】:golanghttp+jsonrpcaccessfromwebpage【发布时间】:2015-07-1403:03:57【问题描述】:我已经使用了Go的net/rpc和net/rpc/jsonrpc包来执行Go进程之间的连接,但是我想知道是否有一种方法可以仅使用标准... 查看详情

Jsonrpc4j 和 go 的 rpc/jsonrpc 之间的 JSONRPC 格式不同

】Jsonrpc4j和go的rpc/jsonrpc之间的JSONRPC格式不同【英文标题】:JSONRPCformatdifferentbetweenJsonrpc4jandgo\'srpc/jsonrpc【发布时间】:2015-11-0510:16:13【问题描述】:当我尝试使用net/jsonrpc包使用jsonrpc4j构建服务器和Java客户端时遇到问题问题是j... 查看详情

jsonrpc.js--原生js实现json-rpc协议

...更方便的进行双向通信。github地址:https://github.com/legu2009/jsonrpc博客园地址:h 查看详情

2.微服务--rpc(代码片段)

...RPC只支持golang开发的服务端与客户端的交互官方库:net/jsonrpc1.jsonrpc采用JSON进行数据编解码,因而支持跨语言调用。2.jsonrpc库是基于tcp协议实现的,暂不支持http传输方式。golang的RPC必须符合四个条件才可以:1.结构体字段首字母... 查看详情

使用 Chart.js 绘制图表,其中填充了每个 JsonRPC 获取的数据

】使用Chart.js绘制图表,其中填充了每个JsonRPC获取的数据【英文标题】:DrawingchartwithChart.jsfilledwithdatagottenperJsonRPC【发布时间】:2015-02-0100:40:20【问题描述】:我想从JsonRPC调用中获取每个JavaScript到PHP服务器的结果以供进一步使... 查看详情

golang下的rpc框架jsonrpc理解和使用示例(代码片段)

说明本文的目的理解一下rpc协议使用上的区别golang下jsonrpc框架的使用示例定义RPC协议import"github.com/pkg/errors"//定义一个叫做Demo的Rpc服务协议//包含参数结构和2个不同的参数处理协议//返回值通过result指针获取,这点是由... 查看详情

delphi使用superobject实现jsonrpc的http远程调用good

[delphi] viewplain copy procedure TForm5.Button4Click(Sender: TObject);  var    O, item: ISuperObject;    Strm:&nbs 查看详情

从 JS 调用 CORS 错误的 Golang 重定向

】从JS调用CORS错误的Golang重定向【英文标题】:GolangRedirectfromJScallCORSerror【发布时间】:2016-08-2420:46:21【问题描述】:当被javascript提取函数调用时,我的golang函数不会重定向到任何地方。这是我之前的问题的扩展,这个问题太... 查看详情

of.jsonrpc(.net轻量级服务框架)

本项目是按照 《JSON-RPC2.0Specification》 的.NET实现,它是基于HTTP或TCP或本地调用方式实现的轻量级松耦合的远程调用服务框架,提供了高效可用、无侵入式的方式搭建自己的服务平台,可以快速开发、调试、发布、调用服... 查看详情

利用jsonrpc技术包装uiautomator

昨天一天在网上搜索解决上一篇文章中的exception:monkeyrunner内置uiautomator出错的原因尽管没找到解决办法。可是让我无意中发现了一个好工具,比sl4a更好用的工具。直接包装uiautomator。调用uiautomator的api在本地直接编写脚本,然后... 查看详情

windows下使用jna在java中调用golang生成的dll

原文:https://studygolang.com/topics/6025/comment/17780 由于golang有自己的gc,所以在传递string值需要一些技巧  查看详情

在具有双向支持的 java 中实现 jsonrpc 2.0 的最佳库

】在具有双向支持的java中实现jsonrpc2.0的最佳库【英文标题】:Bestlibrarytoimplementjsonrpc2.0injavawithbidirectionalsupport【发布时间】:2018-09-2412:00:40【问题描述】:我正在寻找一个库来在java中实现具有双向支持的jsonrpc2.0。我找到了这两... 查看详情

未捕获的类型错误:无法调用 jquery jsonrpc 客户端中未定义的方法“设置”

】未捕获的类型错误:无法调用jqueryjsonrpc客户端中未定义的方法“设置”【英文标题】:UncaughtTypeError:Cannotcallmethod\'setup\'ofundefinedinjqueryjsonrpcclient【发布时间】:2014-02-2815:25:41【问题描述】:我需要通过jquery调用一个远程rpc过... 查看详情

json-rpc轻量级远程调用协议介绍及使用

...有json-rpc的实现框架,java语言中较好的json-rpc实现框架有jsonrpc4j、jpoxy、json-rpc。三者之中jsonrpc4j既可独立使用。又可与spring无缝集合,比较适合于基于spring的项目开发。json-rpc协议很easy,发起远程调用时向服务端数据传输格式例... 查看详情

JQuery Ajax 到 JSONRPC 代理

】JQueryAjax到JSONRPC代理【英文标题】:JQueryAjaxtoJSONRPCProxy【发布时间】:2013-05-1600:23:23【问题描述】:我已经尝试了2天来解决这个问题。我已经尝试了所有的JSONRPC库,但没有一个能奏效,所以我求助于自己。我对代理进行了简... 查看详情

go语言入门篇-grpc基于golang&java简单实现

一.什么是RPC1.简介:RPC:RemoteProcedureCall,远程过程调用。简单来说就是两个进程之间的数据交互。正常服务端的接口服务是提供给用户端(在Web开发中就是浏览器)或者自身调用的,也就是本地过程调用。和本地过程调用相对的就... 查看详情

payto 方法 电子钱包 jsonRPC PHP

】payto方法电子钱包jsonRPCPHP【英文标题】:paytomethodelectrumwalletjsonRPCPHP【发布时间】:2017-06-1801:29:01【问题描述】:哟!我刚刚使用jsonRPC使用php和电子钱包启动了一个脚本。调用getaddressbalance()可以工作,但是payto呢?我试过:$bi... 查看详情

金字塔 jsonrpc 中的自定义错误消息

】金字塔jsonrpc中的自定义错误消息【英文标题】:Customerrormessageinpyramidjsonrpc【发布时间】:2015-08-2610:56:46【问题描述】:我有一个用pyramid_rpc编写的应用程序。我们通过json_rpc在网络上调用我们的函数。有时用户输入中有错误(... 查看详情