• jsonrpc使用


    jsonrpc使用
    1.什么是rpc
    RPC(Remote Procedure Call)远程过程调用,简单说就是通过网络请求服务,不需要了解底层网络技术的协议。
    常用语分布式应用程序。

    2.rpc数据传递格式
    rpc支持多种数据格式传递,json,xml等

    3.tornado中使用jsonrpc示例
    安装服务端包,客户端包

    pip install tornado jsonrpcserver
    pip install tornado jsonrpcclient
    

    服务端程序如下:

    from tornado import ioloop, web
    
    from jsonrpcserver.aio import methods
    from jsonrpcserver.response import NotificationResponse
    
    
    @methods.add
    async def ping():
        return "pong"
    
    
    class RpcTestHandler(web.RequestHandler):
        async def post(self):
            request = self.request.body.decode()
            response = await methods.dispatch(request)
            if not response.is_notification:
                self.write(response)
    

    运行,开始监听
    客户端程序如下:

    # 同步请求
    import jsonrpcclient
    jsonrpcclient.request('http://localhost:20000/test_rpc', 'ping')
    

    运行结果如下:
    E:gitcode ornado-test>python test.py
    --> {"jsonrpc": "2.0", "method": "ping", "id": 1}
    <-- {"jsonrpc": "2.0", "result": "pong", "id": 1} (200 OK)

    # 异步请求
    
    from tornado import ioloop
    from jsonrpcclient.tornado_client import TornadoClient
    
    client = TornadoClient('http://localhost:20000/test_rpc')
    
    async def main():
        result = await client.request('ping')
        print(result)
    
    ioloop.IOLoop.current().run_sync(main)
    

    运行结果如下:
    E:gitcode ornado-test>python test.py
    INFO:jsonrpcclient.client.request:{"jsonrpc": "2.0", "method": "ping", "id": 1}
    INFO:jsonrpcclient.client.response:{"jsonrpc": "2.0", "result": "pong", "id": 1}
    pong

    4.http请求,rpc请求区别
    http协议是支持长连接的,因此和rpc的自定义tcp报文协议相比,连接上没有太大区别,
    区别在于自定义tcp报文做了优化处理,去除了很多无用信息,这是因为rpc是面向服务的。

  • 相关阅读:
    CSS初识
    HTML 初识
    索引
    表查询前之数据导入
    mysql练习2
    AMP+EPP3.0的开发环境配置
    C++异步编程资料汇集贴
    Windows8中如何打包和安装一个本地的Metro类型应用(转)
    std::string, std::wstring, wchar_t*, Platform::String^ 之间的相互转换
    windows RT开发笔记:WinRT DLL及其调用研究
  • 原文地址:https://www.cnblogs.com/shijingjing07/p/8289511.html
Copyright © 2020-2023  润新知