Python- JSON-RPC创建一个远程过程调用
我们使用JSON-RPC创建一个远程过程调用的例子,我们将使用jsonrpcserver库和Flask框架创建一个后端服务,并使用jsonrpcclient作为客户端。这个例子将包括:
- 一个计算服务,提供加、减、乘、除四个方法。
- 错误处理:除数为零时的错误。
- 使用Flask为服务器提供HTTP服务。
服务器端
首先,安装必要的库:
pip install Flask jsonrpcserver
然后,编写服务器代码:
from flask import Flask, request, jsonify, Response
from jsonrpcserver import method, dispatch, Result, Success, Errorapp = Flask(__name__)@method
def add(a, b) -> Result:return Success(a + b)@method
def subtract(a, b) -> Result:return Success(a - b)@method
def multiply(a, b) -> Result:return Success(a * b)@method
def divide(a, b) -> Result:if b == 0:return Error(1, "Division by zero is not allowed")return Success(a / b)@app.route('/jsonrpc', methods=['POST'])
def jsonrpc():print(request.get_data().decode())return Response(dispatch(request.get_data().decode()), content_type="application/json")if __name__ == '__main__':app.run()# pip install Flask jsonrpcserver
客户端
首先,安装jsonrpcclient:
pip install jsonrpcclient[requests]
然后编写客户端代码:
from jsonrpcclient import request, parse, Ok
import requestsdef main():response = requests.post("http://127.0.0.1:5000/jsonrpc", json=request("divide", params=(6, 0)))parsed = parse(response.json())if isinstance(parsed, Ok):print(parsed.result)else:print(parsed.message)if __name__ == '__main__':main()# pip install jsonrpcclient[requests]
在上述代码中,服务器使用Flask提供服务,并接受JSON-RPC请求。客户端发送请求到服务器,并处理服务器返回的错误。
此示例展示了如何将JSON-RPC与Flask结合使用,为应用提供一个简单但功能强大的RPC框架。
服务器端运行结果:
majn@tiger:~$ python server.py* Serving Flask app 'server'* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on http://127.0.0.1:5000
Press CTRL+C to quit
{"jsonrpc": "2.0", "method": "divide", "params": [6, 0], "id": 1}
127.0.0.1 - - [11/Oct/2023 22:15:21] "POST /jsonrpc HTTP/1.1" 200 -
客户端运行结果:
majn@tiger:~$ python client.py
Division by zero is not allowed
在Python的包管理工具pip中,当看到[something]这种语法,它表示要安装的包的一个"额外"或可选的依赖。这是一个方式,使得包的作者可以提供一些可选的功能,这些功能需要额外的依赖来实现,但不是安装该包的核心功能所必需的。
在这个例子中:
pip install jsonrpcclient[requests]
表示正在安装jsonrpcclient包,并且想要与它一起安装支持requests库的可选依赖。在jsonrpcclient的情境下,[requests]意味着想要使用基于requests库的HTTP客户端来发送JSON-RPC请求。这是因为jsonrpcclient支持多种传输方式,而HTTP只是其中之一,而且requests是实现HTTP传输的一种方式。
如果只执行pip install jsonrpcclient,那么只会获得核心的jsonrpcclient功能,不包括任何可选的依赖。然后,如果后来决定需要requests支持,可以再次执行上述命令来添加它。
相关文章:
Python- JSON-RPC创建一个远程过程调用
我们使用JSON-RPC创建一个远程过程调用的例子,我们将使用jsonrpcserver库和Flask框架创建一个后端服务,并使用jsonrpcclient作为客户端。这个例子将包括: 一个计算服务,提供加、减、乘、除四个方法。错误处理:除数为零…...
Linux中scp命令复制文件
scp命令是在Linux中用于在本地主机和远程主机之间进行安全传输文件的命令。下面是使用scp命令的语法: scp [参数] [来源路径] [目标路径]参数: -r:递归复制整个目录。-P:指定远程主机的端口。-p:保留原文件的修改时间…...
Interlay采用Moonbeam路由流动性,为波卡发展更多流动性
波卡上的首选多链开发平台Moonbeam宣布Interlay现在支持由Carrier赋能的Moonbeam路由流动性。Carrier是一个功能强大的token和NFT跨链桥,支持超过12个网络。Interlay是波卡上的一条平行链,与HydraDX一起通过Wormhole、Moonbeam和Carrier为波卡生态挖掘流…...
Jetson Orin NX 开发指南(9): Pixhawk 6X 飞控固件的烧写与 QGroundControl 参数配置
一、前言 由于 Jetson Orin NX 常被用作自主无人机机载电脑,其往往需要与烧写了 PX4 固件的飞控进行通信,飞控的烧写与配置往往会遇到很多问题,因此本文将介绍时下最款的 Pixhawk 系列飞控 Pixhawk 6X,做一个固件烧写和参数配置的…...
Redis(四)多级缓存
文章目录 一、传统缓存存在的问题二、多级缓存方案三、JVM进程缓存案例演示: 四、Lua语法入门Lua语言入门 五、多级缓存(一)安装OpenResty(二)OpenResty入门(三)请求参数处理(四&…...
网站安全防护
1.确保环境安全例如近期LNMP投毒事件 2.nginx/php隐藏版本号/关闭报错显示行 3.限制3306端口/phpMyAdmin尽量不用 4.修改指纹例如X-Powered-By/Cookie 5.上线前后进行主机漏扫网站漏扫 6.系统安装杀毒ClamAV 7.更改后台管理入口 8.安装雷池WAF防护 9.网站使用https协议 10.后台…...
腾讯云南京地域怎么样?南京服务器IP测速Ping值延迟
腾讯云服务器南京地域怎么样?南京地域很不错,正好处于中间的位置,南方北方用户均可以选择,网络延迟更低速度更快,并且目前南京地域有活动,南京地域可用区可选南京一区、南京二区和南京三区,腾讯…...
Harbor 简介
1)什么是Harbor Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。 Harbor以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI 、基于角色的访问控制(Role Based…...
RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Half‘解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
《向量数据库指南》——向量数据库与 ANN 算法库的区别
向量数据库与 ANN 算法库的区别 我们经常听到一个这样的错误观念——向量数据库只是在 ANN(approximate nearest neighbor,近似最近邻)算法上封装了一层。但这种说法大错特错。 向量数据库可以处理大规模数据,而 ANN 算法库只能处理小型的数据集 从本质上来看,以 Milvus 为…...
JavaScript-es6-新版语法-export-import
文章目录 1.export2.import3.export default 命令4.总结 在JavaScript ES6中,export与export default均可用于导出常量、函数、文件、模块等。模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输…...
[elasticsearch]使用postman来查询数据
最近需要debug程序,debug的时候需要查找elasticsearch里面的数据是否正确。 第一步建立一个post请求,并按照图下的方式填上ur和参数: 发送post请求,url为: http://ip:port/index_name/_search我这里查询的是title字…...
【小程序练习】文件操作案例
文章目录 前言1. 案例12. 案例23. 案例3总结 前言 我们学会了文件的基本操作 文件内容读写操作,接下来,我们实现一些小工具程序,来锻炼我们的能力。 关注收藏, 开始学习吧🧐 1. 案例1 扫描指定目录,并找到名称中包…...
flask框架-[实现websocket]:将socketio处理函数部分集中管理,使用类的方式来管理,集中管理socketio处理函数
一、项目依赖 APScheduler3.10.4 eventlet0.33.3 Flask2.1.3 Flask-Caching1.10.1 Flask-Cors3.0.10 Flask-Migrate2.7.0 Flask-RESTful0.3.9 Flask-SocketIO5.1.1 Flask-SQLAlchemy2.5.1 PyJWT2.3.0 PyMySQL1.0.2 redis3.5.3 SQLAlchemy1.4.0 #额外修改 Werkzeug2.0.2 #额外修…...
Vue的学习补充
1.Vue路由-404 作用:当路径找不到匹配时,给个提示页面 位置:配在路由最后 语法:path:*(任意路径)-前面不匹配就命中最后这个 2.Vue路由-模式设置 hash路由(默认) 例如ÿ…...
vue移动端H5调起手机发送短信(兼容ios和android)
移动端h6页面调起手机发送短信功能,ios和android的兼容写法不一样。 android window.location.href sms:10086?body${encodeURIComponent(Hello, 测试短信发送)} ios window.location.href sms:10086&body${encodeURIComponent(Hello, 测试短信发送)}//或者w…...
spring boot RabbitMq基础教程
RabbitMq 由于RabbitMQ采用了AMQP协议,因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息,都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不同语言的客户端。 但是,RabbitMQ官方提供的Java客户端编码相对复杂,一般…...
springboot vue 部署至Rocky(Centos)并自启,本文部署是若依应用
概述 1、安装nohup(后台进程运行java) 2、安装中文字体(防止中文乱码) 3、安装chrony(保证分布式部署时间的一致性) 5、安装mysql数据,迁移目录,并授权自启动; 6、安…...
Mysql之增删改查
这篇文章旨在介绍mysql的增删改查中的基本操作 所有命令皆是以分号(;)结尾。 1.显示命令 在写增的有关命令前,我们更应该知道如何显示,这样有助于更好的检查我们的结果是否正确。 #显示数据库列表 show databases;#…...
【考研数学】矩阵三大关系的梳理和讨论 | 等价、相似、合同
文章目录 引言一、定义二、判别法写在最后 引言 昨天学了矩阵的合同关系,老汤讲义里也列举了三大关系的定义和判别法,方便我们进行区分。但是光看还是难以入脑,为此,我想自己梳理一遍,顺带也复习一下线代之前的所学。…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
