RPC协议及其python实例[通俗易懂]

RPC协议及其python实例[通俗易懂]RPC协议在OpenStack中广泛使用,那么什么是RPC协议?做什么用的那?搜索了一阵,有了一个大概的印象。RPC是一个应用层的协议,分为client端和server端,server端写好了具体的函数实现,client端远程调用该函数,返回函数的结果。好处是很明显的:首先是可以直接利用别的程序的部分功能,这是最基础的。更重要的,利用rpc可以实现系统的分布式架构,一方面有些功能比

大家好,又见面了,我是你们的朋友全栈君。

RPC协议在OpenStack中广泛使用,那么什么是RPC协议?做什么用的那?

搜索了一阵,有了一个大概的印象。

RPC是一个应用层的协议,分为client端和server端,server端写好了具体的函数实现,client端远程调用该函数,返回函数的结果。

好处是很明显的:

首先是可以直接利用别的程序的部分功能,这是最基础的。更重要的,利用rpc可以实现系统的分布式架构,一方面有些功能比较相关应该放到一起实现,一方面物理因素的原因要求系统分解为多机实现,因此有的功能实现为了一个机器上的进程,而另外的功能实现为在另外机器上的进程,这两个进程间的协同和信息交互就可以通过rpc来实现。

python 支持RPC的应用,看看官方的例子

server端增加了一些应用函数,如add、pow、div等

from SimpleXMLRPCServer import SimpleXMLRPCServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler

# Restrict to a particular path.
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)

# Create server
server = SimpleXMLRPCServer(("localhost", 8000),
                            requestHandler=RequestHandler)
server.register_introspection_functions()

# Register pow() function; this will use the value of
# pow.__name__ as the name, which is just 'pow'.
server.register_function(pow)

# Register a function under a different name
def adder_function(x,y):
    return x + y
server.register_function(adder_function, 'add')

# Register an instance; all the methods of the instance are
# published as XML-RPC methods (in this case, just 'div').
class MyFuncs:
    def div(self, x, y):
        return x // y

server.register_instance(MyFuncs())

# Run the server's main loop
server.serve_forever()

client端使用RPC远程调用

import xmlrpclib

s = xmlrpclib.ServerProxy('http://localhost:8000')
print s.pow(2,3)  # Returns 2**3 = 8
print s.add(2,3)  # Returns 5
print s.div(5,2)  # Returns 5//2 = 2

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/144479.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Could not determine java version from ‘11.0.8‘

    Could not determine java version from ‘11.0.8‘

    2021年10月2日
    116
  • python执行测试用例_java随机数random

    python执行测试用例_java随机数random前言通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。pytest默认运行用例的顺序是按模块和用例命名的ASCII编码

    2022年7月28日
    20
  • 博客系统开发日记[通俗易懂]

    博客系统开发日记[通俗易懂]前端开发问题:设置div默认百分百比例,一定要设置html和body: html,body,.main,.sidebar{height:100%;} 如何去除Bootstarp栅格系统默认的15px的padding:https://blog.csdn.net/TsuiXh/article/details/93891357 要想兼容手机端一定记得加: <metaname=”viewp.

    2022年6月5日
    32
  • PHP性能提升之opcache「建议收藏」

    PHP性能提升之opcache「建议收藏」     php的不同版本的迭代,都有优化(这是废话),php7,已经出来这么久了,可以说说是相当成熟了,php7的性能提升相对于php5.6等版本的状况,不只是一点儿,而是极大的提升了php的性能。    php自带的缓存有apc,O+。在PHP5.5开始,已经随着PHP的源代码一起发布,并且改名为:Opcache.OPcache 为什么可以优化?   …

    2022年9月2日
    3
  • JAVA写文本编辑器(一)

          作业题,花了整整两天终于搞出来了,今天给大家整理一下思路。      这里用swing,awt写的。        我们大概要做成一个电脑的记事本那样的一个编辑器。可以调整字体,字号,颜色。能够打开、保存文件,新建窗口,点击退出,还有一个关于介绍的窗口。整体看起来功能不是很多,只要一部分一部分的去完成就很好办了。      关键词:JAVA文本编辑器,      思路…

    2022年4月6日
    66
  • linux重启nginx服务命令_windows nginx启动命令

    linux重启nginx服务命令_windows nginx启动命令Linux重启nginx

    2022年8月13日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号