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)
pyjsonrpc的使用的更多相关文章
- pyjsonrpc模块使用
pyjsonrpc模块的远程过程调用方法. # -*- coding:utf-8 -*- #!/usr/bin/env python2.7 # @Author : tianbao # @Contact ...
- week06 07 创建RPC SERVER 换个镜像安装下载
RPC server 使用python类库 https://pypi.org/project/python-jsonrpc/ 和NPM 不一样 他没有global选项 他安装的就是全局的安装的类库叫p ...
- 从0到1:全面理解RPC远程调用
上一篇关于 WSGI 的硬核长文,不知道有多少同学,能够从头看到尾的,不管你们有没有看得很过瘾,反正我是写得很爽,总有一种将一样知识吃透了的错觉. 今天我又给自己挖坑了,打算将 rpc 远程调用的知识 ...
随机推荐
- python随机生成字符
Python2: Unicode是一种通用的编码方式,不论是英文字母.汉字.日语还是其他文字都能够对应一个唯一的Unicode编码(序号). chr(100) # 得到整数对应的ascii码(小于25 ...
- 《古剑奇谭3》千秋戏辅助工具(前端React制作)
前言 一直身在武汉,基于众所周知的疫情原因,这个春节只能宅着. 不过其实这个春节是这些年来过得最爽的一个了. 没有鞭炮,不用四处跑,安安心心呆在家里玩玩游戏看看书写写代码,其实日子过得还是挺悠闲的. ...
- 【题解】战争系列-截获密文I
给你一个最短代码: #include <iostream> #include <string> int main(){ std::string str; std::cin &g ...
- pytorch之 activation funcion
import torch import torch.nn.functional as F from torch.autograd import Variable import matplotlib.p ...
- tomcat solr服务无法搜索中文
把tomcat的配置文件修改一下就好了, vi server.xml <Connector port="8080" protocol="HTTP/1.1" ...
- Linux 磁盘原理与管理 (分区 挂载)
目前硬盘与主机系统的联系主要有几种传输介面规格: IDE介面: IDE介面插槽所使用的排线较宽,每条排线上面可以接两个IDE装置,由於可以接两个装置,那为了判别两个装置的主/从架构, ...
- K8S ConfigMap使用
k8s系列文章: 什么是K8S configmap是k8s的一个配置管理组件,可以将配置以key-value的形式传递,通常用来保存不需要加密的配置信息,加密信息则需用到Secret,主要用来应对以下 ...
- Python字符串字母大小写变换
说明: 字符串就是一系列字符,在Python中用引号括起来的都是字符串,引号可以是单引号,也可以是双引号,比如:“This is a book.” ‘This is an apple.’ 接下来简单 ...
- pyhton项目和晋江文学城数据分析项目
1.图书管理系统 图1.图书管理系统(作者信息列表页面) 图2.图书管理系统(作者信息修改页面) 2.个人博客网页设计 图3.博客(我的日记-->个人日记)页面 图4.博客(关于我--> ...
- WannaMine4.0查杀方法
病毒现象 扫描爆破内网基于445端口的SMB服务 服务器出现卡顿.蓝屏 服务器主动访问恶意域名:totonm.com.cake.pilutce.com:443 病毒处置 删除关键病毒文件:C:\Win ...