python jsonrpc_pyjsonrpc的使用

pyjsonrpc的使用

客户端 JsonRpcClient.py

#!usr/bin/env python2.7

# -*- coding: utf-8 -*-

import ssl

import socket

import inspect

import logging

import pyjsonrpc

try:

ssl._create_default_https_context = ssl._create_unverified_context

except Exception:

pass

logger = logging.getLogger('blog')

def func():

# 获取当前函数名, 如果是类直接调用,则是类名

return inspect.stack()[1][3]

class JsonRpcIF(object):

"""封装的基类"""

def __init__(self, server, port, ssl=True):

if ssl:

self.url = "https://%s:%s/jsonrpc" % (server, port)

else:

self.url = "http://%s:%s/jsonrpc" % (server, port)

def request(self, method, params, timeout=None):

# params是参数: {"key1": "value1", "key2": "value2"}

try:

self.client = pyjsonrpc.HttpClient(

url=self.url,

timeout=timeout,

)

# 获取服务端执行相应method后的结果

response = getattr(self.client, method)(params)

except socket.timeout:

logger.error("JsonRpc request '%s' timeout", method)

response = {"status": {"code": -1, "msg": "timeout"}}

except Exception as err:

logger.error("JsonRpc request '%s' exception: %s", method, err)

response = {"status": {"code": -2, "msg": err}}

return response

class LocalRpc(JsonRpcIF):

"""连接本服务器rpc"""

def __init__(self, server="127.0.0.1", port=8080):

super(LocalRpc, self).__init__(server, port, ssl=False)

def get_mac(self, request=None):

# func() 返回的是"get_mac"字符串 request是参数: {"key1": "value1", "key2": "value2"}

return self.request(func(), request, timeout=5)

def get_server_ip(self, request=None):

# func() 返回的是"get_server_ip"字符串

return self.request(func(), request, timeout=10)

def get_file_name(self, request=None):

# func() 返回的是"get_file_name"字符串

return self.request(func(), request, timeout=None)

locRpc = LocalRpc(server="127.0.0.1", port=8080)

服务端 JsonRpcServer.py

#!usr/bin/env python2.7

# -*- coding: utf-8 -*-

import logging

import traceback

import pyjsonrpc

logger = logging.getLogger('blog')

class RequestHandler(pyjsonrpc.HttpRequestHandler):

@pyjsonrpc.rpcmethod

def get_mac(self, params):

ret = {"status": {"code": 0, "msg": "success"}, "mac": ""}

try:

# params为 {"key1": "value1", "key2": "value2"}

key1 = params.get("key1", "")

except Exception as err:

logger.error("get mac failed: %s", err)

ret = {"status": {"code": -1, "msg": err}}

return ret

@pyjsonrpc.rpcmethod

def get_server_ip(self, params):

ret = {"status": {"code": 0, "msg": "success"}, "server_ip": ""}

try:

# params为 {"key1": "value1", "key2": "value2"}

key1 = params.get("key1", "")

except Exception:

# traceback.format_exc()能获取到详细的错误打印栈

logger.error("get server ip error, %s", traceback.format_exc())

ret = {"status": {"code": -1, "msg": traceback.format_exc()}}

return ret

@pyjsonrpc.rpcmethod

def get_file_name(self, params):

ret = {"status": {"code": 0, "msg": "success"}, "get_file_name": ""}

try:

key1 = params.get("key1", "")

except Exception:

# traceback.format_exc()能获取到详细的错误打印栈

logger.error("get file name error, %s", traceback.format_exc())

ret = {"status": {"code": -1, "msg": traceback.format_exc()}}

return ret

def main(server_ip, port):

# 线程HTTP-Server

http_server = pyjsonrpc.ThreadingHttpServer(

server_address=(server_ip, port),

RequestHandlerClass=RequestHandler

)

http_server.serve_forever()

if __name__ == '__main__':

main('localhost', 8080)

扫码关注我们

微信号:SRE实战

拒绝背锅 运筹帷幄

×

选择打赏方式:

微信

QQ钱包

支付宝

打赏

打赏

打赏

多少都是心意!谢谢大家!!!

×

选择分享方式:

微信扫一扫,分享朋友圈

Or

手机扫一扫,精彩随身带

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值