第一步
在有docker的服务器操作,如果没有 可以找一台闲置的机器安装docker
yum install docker -y
然后启动docker
systemctl start docker
第二步 下载thrift镜像
docker pull thrift
第三步
准备thrift文件
cat WebMonitor.thrift 定义了一个类的名字,以及定义了一个方法输出的值是string,
输入的值1号位置是accesstime的string,2号位置是url的string
service WebMonitorService {
string webAccess(1:string accesstime,2:string url)
}
④
在thrift文件所在位置运行docker
docker run -v "$PWD:/data" thrift thrift -o /data --gen py /data/WebMonitor.thrift
运行后在当前目录生成一个文件夹,叫gen-py,里面有个文件夹叫WebMonitor对应的是thrift文件的名字
在WebMonitor文件夹里有个py文件叫WebMonitorService.py的文件
在之后编写的server.py以及client.py需要修改相应的配置
⑤
在gen-py中编写server.py,其中的WebMonitorService以及webAccess以及webAccess方法里的参数需要跟thrift文件中定义的一一对应
# -*- coding: UTF-8 -*-
"""
# furyamber
"""
from WebMonitor import WebMonitorService
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
import datetime
import sys
reload(sys)
import requests
import subprocess
sys.setdefaultencoding('utf-8')
class WebMonitorServiceHandler:
"""
# WebMonitorServiceHandler是中定义的方法用于实现在thrift文件中定义的接口
"""
def __init__(self):
self.log = {}
def webAccess(self,accesstime,url):
try:
r = requests.get(url,timeout=1)
except Exception,e:
response_time=0
else:
response_time=int(r.elapsed.microseconds)
print response_time
return str(response_time)
# 实例化Handler
handler = WebMonitorServiceHandler()
# 根据handler创建一个processor
processor = WebMonitorService.Processor(handler)
# 指定端口启动transport
transport = TSocket.TServerSocket(port=9090)
# 创建tfactory, pfactory
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
# 创建Server
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print 'Starting the server...'
# 启动server
server.serve()
print 'done.'
⑥编写client.py文件
#!/usr/bin/env python
#-*- coding:utf-8 -*-
__author__ = "[email protected]"
__created__ = "2018-12-05 14:14:37"
from WebMonitor import WebMonitorService
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
import datetime
import time
from apscheduler.schedulers.background import BackgroundScheduler
def timedTask():
now = int(time.time())
now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
try:
# 连接Socket,根据实际情况修改为server所在的地址
transport = TSocket.TSocket('192.168.1.30', 9090)
# 获取Transport
transport = TTransport.TBufferedTransport(transport)
# 获取TBinaryProtocol
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# 创建一个Client
client = WebMonitorService.Client(protocol)
# 连接通道transport
transport.open()
# 调用某个没有返回值的函数
print client.webAccess(now,"http://www.baidu.com")
# 调用某个有返回值的函数
# 关闭通道transport
transport.close()
except Thrift.TException, tx:
print '%s' % (tx.message)
if __name__ == '__main__':
# 创建后台执行的 schedulers
scheduler = BackgroundScheduler()
# 添加调度任务
# 调度方法为 timedTask,触发器选择 interval(间隔性),间隔时长为 2 秒
scheduler.add_job(timedTask, 'interval', seconds=1)
# 启动调度任务
scheduler.start()
while True:
print(time.time())
time.sleep(5)
第七步
把需要gen-py拷贝到需要的服务器或者客户机上,分别安装需要的python模块,可以把gen-py改成你想要的名字
服务端运行要安装thrift木块以及requests模块
然后运行python server.py启动服务端
客户端要安装thrift以及APScheduler模块
运行python client.py启动客户端