网站首页 > 博客文章 正文
技术简单介绍
json-rpc是基于json的跨语言远程调用协议。比xml-rpc、webservice等基于文本的协议数据传输格小;相对hessian、java-rpc等二进制协议便于调试、实现、扩展,是很优秀的一种远程调用协议。眼下主流语言都已有json-rpc的实现框架,java语言中较好的json-rpc实现框架有jsonrpc4j、jpoxy、json-rpc。三者之中jsonrpc4j既可独立使用。又可与spring无缝集合,比較适合于基于spring的项目开发。
一、JSON-RPC协议描写叙述
json-rpc协议很easy,发起远程调用时向服务端数据传输格式例如以下:
{ "method": "sayHello", "params": ["Hello JSON-RPC"], "id": 1}
參数说明:
method: 调用的方法名
params: 方法传入的參数。若无參数则传入 []
id : 调用标识符。用于标示一次远程调用过程
server其收到调用请求,处理方法调用,将方法效用结果效应给调用方;返回数据格式:
{ "result": "Hello JSON-RPC", "error": null, "id": 1 }
參数说明:
result: 方法返回值。若无返回值。则返回null。
若调用错误,返回null。
error :调用时错误,无错误返回null。
id : 调用标识符,与调用方传入的标识符一致。
以上就是json-rpc协议规范,很easy,小巧。便于各种语言实现。
二、JSON-RPC简单演示样例
2.1、server端Java调用演示样例
jsonrpc4jserver端java演示样例:
public class HelloWorldServlet extends HttpServlet { private static final long serialVersionUID = 3638336826344504848L; private JsonRpcServer rpcService = null; @Override public void init(ServletConfig config) throws ServletException { super.init(config); rpcService = new JsonRpcServer(new HelloWorldService(), HelloWorldService.class); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { rpcService.handle(req, resp); } }
2.2、Javaclient调用演示样例
jsonrpc4j的Javaclient调用演示样例:
JsonRpcHttpClient client = new JsonRpcHttpClient( new URL("http://127.0.0.1:8080/index.json")); Map<String,String> headers = new HashMap<String,String>(); headers.put("name", "剑白"); client.setHeaders(headers); String properties = client.invoke("getSystemProperties", null, String.class); System.out.println(properties);
2.3、JavaScriptclient调用演示样例
基于jsonrpcjs的JavaScriptclient调用演示样例:
var rpc = new jsonrpc.JsonRpc('http://127.0.0.1:8080/index.json'); rpc.call('getSystemProperties', function(result){ alert(result); });
2.4、直接GET请求进行调用
无需不论什么client。仅仅需手工拼接參数进行远程调用,请求URL例如以下:
http://127.0.0.1:8080/index.json?method=getSystemProperties&id=3325235235235¶ms=JTViJTVk
參数说明:
method : 方法名
params :调用參数。json的数组格式[], 将參数需先进行url编码,再进行base64编码
id : 调用标识符,随意值。
三、JSON-RPC总结
json-rpc是一种很轻量级的跨语言远程调用协议。实现及使用简单。
仅需几十行代码,就可以实现一个远程调用的client。方便语言扩展client的实现。
server端有php、java、python、ruby、.net等语言实现,是很不错的及轻量级的远程调用协议。
猜你喜欢
- 2024-10-30 SpringCloudRPC远程调用核心原理:代理模式与RPC客户端实现类
- 2024-10-30 基于HTTP RESTFul的远程调用和基于RPC的远程调用有什么区别?
- 2024-10-30 23 | RPC框架:10万QPS下如何实现毫秒级的服务调用?
- 2024-10-30 基于HTTPRESTFul的远程调用和基于RPC的远程调用有什么区别?
- 2024-10-30 远程方法调用RMI详解,和RPC的思路很相似
- 2024-10-30 一文读懂几种远程调用的区别与联系
- 2024-10-30 架构实战面试必备:如何实现RPC调用保护
- 2024-10-30 事务的使用:不要在事务中包含任何rpc调用
- 2024-10-30 SpringBoot+RabbitMQ 实现 RPC 调用
- 2024-10-30 Java进阶:远程过程调用(RPC)及回调方法(一)
你 发表评论:
欢迎- 07-07Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- 07-07Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- 07-07Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- 07-07Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- 07-07IT运维必会的30个工具(it运维工具软件)
- 07-07开源项目有你需要的吗?(开源项目什么意思)
- 07-07自动化测试早就跑起来了,为什么测试管理还像在走路?
- 07-07Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- 最近发表
-
- Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- IT运维必会的30个工具(it运维工具软件)
- 开源项目有你需要的吗?(开源项目什么意思)
- 自动化测试早就跑起来了,为什么测试管理还像在走路?
- Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- Cursor 太贵?这套「Cline+OpenRouter+Deepseek+Trae」组合拳更香
- 为什么没人真的用好RAG,坑都在哪里? 谈谈RAG技术架构的演进方向
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)