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 远程调用的知识 ...
随机推荐
- HEXO常用命令总结
博客搬家:hexo常用命令总结 常见命令 hexo new "postName" #新建文章 hexo new page "pageName" #新建页面(新建 ...
- Codeforces_734_E
http://codeforces.com/problemset/problem/734/E 每次操作可以把连通的同颜色的点全部换颜色,缩点,找直径,第一遍dfs找起点,第二遍dfs求直径. #inc ...
- CCF_201512-1_数位之和
水. #include<iostream> #include<cstdio> using namespace std; int main() { ; cin >> ...
- CERC2017 H Hidden Hierarchy(树+模拟)
题意: 在一些给定的目录里按要求展开到制定大小并按字典序输出 思路: 因为有目录这个东西,所以想到模拟一个类似字典树的东西,不过这里每个儿子可能有n个节点,而且不能O(1)查询了 代码超长.. #in ...
- docker 修改 bridge网桥网段
首先停止正在使用的 Docker 服务: $ sudo service docker stop 接着删除 Docker 默认网桥 docker0 : $ sudo ip link set dev do ...
- H5页面优化
1. 页面优化 优化内容: 提升网页响应速度:减少请求,文件大小,页面性能 对搜索引擎,屏幕阅读器友好: 提高可读性,可维护性:规范代码 优化操作: 减少请求:小图标使用sprite拼图合并为一个图片 ...
- TCP三次握手四次挥手过程梳理
1. 数据传输的大致示意图 1.1 TCP数据报文首部内部 1.2 TCP连接的几种状态说明 即命令 netstat 结果中的所有状态: 2. TCP连接建立的全过程 2.1 TCP三次握手建立TCP ...
- Nginx简介入门
买了极客时间上陶辉的Nginx核心知识100讲,正在学.链接 Nginx 4个组成部分 二进制可执行文件 nginx.conf 配置文件 access.log error.log nginx 版本 M ...
- HDU 5234 背包。
J - 10 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- 国内jenkins搭建不再龟速的方式
最新国内jenkisn搭建过程 第一步下载jenkins 点击进入清华源jenkins下载地址,我们下载的是jenkins-2.204.2.zip版本 之后解压后安装. 第二步配置管理员密码 自动弹出 ...