一分钟入门RPC

简介: 一分钟入门RPC

什么是 RPC?


RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务。在我们日常的开发中使用很是广泛,尤其是在分布式系统中。



RPC 和 HTTP 有什么区别?


RPC 要求客户端和服务端使用的协议及版本必须一致,而 HTTP 则屏蔽了这部分。假如你的服务端是在 Linux 上用 Go 语言开发的,而客户端是在 windows 上用 Java 开发的,此时你应当选择 HTTP


RPC 通常用于微服务内部通信,当你需要使用中间件进行请求转发的时候,你应当选择 HTTP


当某个服务的请求量很大且频繁时,对于同等的请求,由于 HTTP 的报文比 RPC 要大很多,所以你应当选择 RPC


小结


  1. HTTP 灵活,跨平台&语言。
  2. HTTP 相比 RPC 更简单。
  3. RPC 比 HTTP 更快。


一个例子认识 RPC


服务端


from xmlrpc.server import SimpleXMLRPCServer
# lcoal function
def sayHi(name):
    print(f'Hi {name}!')
    return f'Hi {name}!'
if __name__ == '__main__':
    # server instance
    server = SimpleXMLRPCServer(('127.0.0.1',8889),allow_none=True)
    # register function to rpc server
    # after registered, local function can be call in rpc client
    server.register_function(sayHi)
    print(f'server listening on 127.0.0.1:8889')
    # start rpc server
    server.serve_forever()
复制代码


网络异常,图片无法展示
|


客户端


from xmlrpc.client import ServerProxy
if __name__ == '__main__':
    # start rpc client
    with  ServerProxy('http://127.0.0.1:8889',allow_none=True) as client:
        # call server function sayHi
        res = client.sayHi('phyger')
        print(res)
复制代码


网络异常,图片无法展示
|


如上,我们可以看到客户端成功调用了服务端的方法并且返回了期望的结果。


RPC 流程简析


RPC 服务端实际是基于 TPCsocket 连接,它将服务暴露在主机的某个端口上,客户端通过这个端口和服务端建立连接,然后调用 RPC API,让服务端的方法在服务端运行,同时服务端将返回值发送给客户端。


更好用的 RPC 库


因为 xmlrpcPython 自带的,而且无法跨语言,鉴于此,有大神就推出了一款更加人性化的 RPC 库:hprose(High-Performance Remote Object Service Engine)


hprose 可以跨语言使用,目前其支持 Java.NETGolangPHPCPython 等超过 20 种语言。


服务端


# from xmlrpc.server import SimpleXMLRPCServer
# # lcoal function
# def sayHi(name):
#     print(f'Hi {name}!')
#     return f'Hi {name}!'
# if __name__ == '__main__':
#     # server instance
#     server = SimpleXMLRPCServer(('127.0.0.1',8889),allow_none=True)
#     # register function to rpc server
#     # after registered, local function can be call in rpc client
#     server.register_function(sayHi)
#     print(f'server listening on 127.0.0.1:8889')
#     # start rpc server
#     server.serve_forever()
import hprose
def sayHi(name):
    print(f'Hi,{name}!')
    return f'Hi,{name}!'
def sayBye(name):
    print(f'Bye,{name}!')
    return f'Bye,{name}!'
def main():
    # create rpc server instance
    server = hprose.HttpServer(host='localhost',port=8880)
    # add single function
    # server.addFunction(sayHi)
    # add more functions
    server.addFunctions([sayHi,sayBye])
    # start rpc server
    server.start()
if __name__ == '__main__':
    print('server listening on localhost:8880')
    main()
复制代码


网络异常,图片无法展示
|


客户端


import hprose
def main():
    # start rpc client
    client = hprose.HttpClient('http://localhost:8880')
    # call server function sayHi & sayBye
    res1 = client.sayHi('Python测试和开发')
    res2 = client.sayBye('Python测试和开发')
    print(res1,'\n'+res2)
if __name__ == '__main__':
    main()
复制代码


网络异常,图片无法展示
|


以上就是今天的全部内容了,感谢您的阅读,我们下节再会。

相关文章
|
10月前
|
存储 JavaScript Linux
开源 Golang 微服务入门二:RPC 框架 Kitex| 青训营笔记
Kitex 字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部已广泛使用。如果对微服务性能有要求,又希望定制扩展融入自己的治理体系,Kitex 会是一个不错的选
176 0
开源 Golang 微服务入门二:RPC 框架 Kitex| 青训营笔记
|
XML JSON 编解码
Go微服务(一)——RPC详细入门
Go微服务(一)——RPC详细入门
109 0
Go微服务(一)——RPC详细入门
|
安全 Dubbo 测试技术
软件测试|不会Python RPC,一篇文章教你入门
软件测试|不会Python RPC,一篇文章教你入门
92 0
软件测试|不会Python RPC,一篇文章教你入门
|
JSON 网络协议 Dubbo
gRPC(一)入门:什么是RPC?
RPC是一种方法,而HTTP是一种协议。两者都常用于实现服务,在这个层面最本质的区别是RPC服务主要工作在TCP协议之上(也可以在HTTP协议),而HTTP服务工作在HTTP协议之上。由于HTTP协议基于TCP协议,所以RPC服务天然比HTTP更轻量,效率更胜一筹。
322 0
gRPC(一)入门:什么是RPC?
|
负载均衡 算法 应用服务中间件
Netty框架入门(二)之基于Netty实现简单的Rpc调用
Netty框架入门(二)之基于Netty实现简单的Rpc调用
179 0
Netty框架入门(二)之基于Netty实现简单的Rpc调用
|
XML Dubbo 应用服务中间件
RPC原理及Dubbo入门
现在互联网公司没有不用分布式的,看看招聘岗位都要求着Dubbo,Spring Cloud等等。 关于Dubbo,不好意思去说,我所在的公司比较小,架构相对没有那么复杂,服务也没那么多,就没在生产环境用Dubbo,面试官问我用过Dubbo的时候,我心里好纠结啊,我只在本地做过Demo,不过不管有没有用过,能回答上有关Dubbo的问题,就能证明你懂这个。
2481 0
|
Dubbo 搜索推荐 应用服务中间件
|
2月前
|
负载均衡 Dubbo Java
Dubbo 3.x:探索阿里巴巴的开源RPC框架新技术
随着微服务架构的兴起,远程过程调用(RPC)框架成为了关键组件。Dubbo,作为阿里巴巴的开源RPC框架,已经演进到了3.x版本,带来了许多新特性和技术改进。本文将探讨Dubbo 3.x中的一些最新技术,包括服务注册与发现、负载均衡、服务治理等,并通过代码示例展示其使用方式。
73 9