python实现rpc远程调用

来源:互联网 发布:百度霸屏软件 编辑:程序博客网 时间:2024/04/24 04:42

    远程调用就是将对象名、函数名、参数等传递给远程服务器,服务器将处理结果返回给客户端。

   

远程调用使得调用远程服务器的对象、方法的方式就和调用本地对象、方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了。远程调用是分布式系统的基础。

远程调用一般分为两种,远程过程调用(RPC)和远程方法调用(RMI),这里,我们介绍RPC远程过程调用。

service.py代码如下:

from SimpleXMLRPCServer import SimpleXMLRPCServer  def add(x, y):    return x + y   if __name__ == '__main__':    s = SimpleXMLRPCServer(('127.0.0.1', 8080))    s.register_function(add)    s.serve_forever()
s是一个绑定了本地8080端口的服务器对象,register_function()方法将函数add注册到s中。serve_forever()启动服务器。

client.py代码如下:

from xmlrpclib import ServerProxyif __name__ == '__main__':    s = ServerProxy("http://127.0.0.1:8080")    print s.add(3,4)

现在,运行server.py,然后运行client.py,client.py所在的console会输出7。


我们用wireshark看一下这期间传递的数据是什么样子的,请求的数据:

<?xml version='1.0' ?><methodCall>    <methodName>        add    </methodName>    <params>        <param>            <value>                <int> 3 </int>                </value>        </param>        <param>            <value>                <int> 4 </int>            </value>        </param>    </params></methodCall>

响应的数据:

<?xml version='1.0' ?><methodResponse>    <params>        <param>            <value>                <int> 7 </int>            </value>        </param>    </params></methodResponse>


0 0
原创粉丝点击