博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python利用XMLRPC实现分布式系统
阅读量:3908 次
发布时间:2019-05-23

本文共 1525 字,大约阅读时间需要 5 分钟。

转载:

RPC(远程过程调用):把本地的函数,放到远端去调用。其调用原理是:
1)首先A与B之间建立一个TCP连接;
2) 然后A把需要调用的方法名以及参数序列化成字节流发送出去;
3)B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用并把结果返回;
4)A接受远程调用结果,然后do()。

RPC框架也就是把上线说的具体的细节封装起来,给用户提供API使用。

XML-RPC:XML Remote Procedure Call,即XML远程方法调用,利用http+xml封装进行RPC调用。基于http协议传输、XML作为信息编码格式。一个xml-rpc消息就是一个请求体为xml的http-post请求,服务端执行后也以xml格式编码返回。

举例:

server端:

#!/usr/bin/env pythonfrom SimpleXMLRPCServer import SimpleXMLRPCServerglobal valval = 1class RPCTest(object):    def global_test(self):        global val        val += 2        return val    def add(self, x, y):        return x + y    def subtract(self, x, y):        return x - y    def multiply(self, x, y):        return x * y    def divide(self, x, y):        return x / yserver = SimpleXMLRPCServer(("localhost", 8000))print "Listening on port 8000..."rpc_test = RPCTest()server.register_multicall_functions()server.register_function(rpc_test.add, 'add')server.register_function(rpc_test.subtract, 'subtract')server.register_function(rpc_test.multiply, 'multiply')server.register_function(rpc_test.divide, 'divide')server.register_function(rpc_test.global_test, 'global_test')server.serve_forever()

Client端:

#!/usr/bin/env pythonimport xmlrpclibproxy = xmlrpclib.ServerProxy("http://localhost:8000/")multicall = xmlrpclib.MultiCall(proxy)#multicall.add(7,3)#multicall.subtract(7,3)#multicall.multiply(7,3)#multicall.divide(7,3)#print("7+3=%d, 7-3=%d, 7*3=%d, 7/3=%d" % (tuple(result)))multicall.global_test()result = multicall()print("result = %d" % (tuple(result)))
你可能感兴趣的文章
如何利用.NETCore向Azure EventHubs准实时批量发送数据?
查看>>
WPF 框架全构建环境虚拟机硬盘分享
查看>>
ABP框架 v3.0 已发布!
查看>>
使用.Net Core实现的一个图形验证码
查看>>
.NET 开源项目 StreamJsonRpc 介绍[中篇]
查看>>
Blazor带我重玩前端(三)
查看>>
基于.NetCore3.1系列 —— 认证授权方案之授权揭秘 (下篇)
查看>>
实现业务数据的同步迁移 · 思路一
查看>>
龙芯开源社区上线.NET主页
查看>>
eShopOnContainers 知多少[11]:服务间通信之gRPC
查看>>
闲谈设计模式
查看>>
平台or职位,你怎么选?
查看>>
骚年快答 | 技术中台与业务中台都是啥?
查看>>
骚年快答 | 微服务架构中的BFF到底是啥?
查看>>
设计模式之适配器模式
查看>>
如何利用Gitlab-CI持续部署到远程机器?
查看>>
.NET Core + K8S + Loki 玩转日志聚合
查看>>
ASP.NET Core中的分布式缓存
查看>>
在ASP.NET Core中创建自定义端点可视化图
查看>>
继续分享 5 个实用的 vs 调试技巧
查看>>