来源:
声明:如果我侵犯了任何人的权利,请联系我,我会删除
欢迎高手来喷我
文章目录
完整项目下载 https://github.com/gqj123/spyne-hbase
Python利用spyne 实现webservice服务
前提所有的网络和端口都可以同信:ping的同和telnet的通
spyne的原理啥的请移步https://www.cnblogs.com/guanfuchang/p/5985070.html,这个哥们的博客会有些介绍,我这里只讲我的应用
Client端发送请求之前,Server端需要开启并运行Spyne服务,Client再开启Spyne服务,双方建立TCP连接,然后进行通信
服务端代码server.py: 实现RangeQuery范围查询和PointQuery点查询
在linux服务器中运行这段代码 python server.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 远程调用需要的包
from spyne import Application,rpc,ServiceBase,Iterable,Integer,Unicode
from spyne.protocol.soap import Soap11,Soap12
from spyne.server.wsgi import WsgiApplication
# HBase需要的包
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase
from hbase.ttypes import *
import happybase
import re
import sys
import time
import os
import json
class RangeQuery(ServiceBase):
@rpc(Unicode,Unicode, Unicode, Unicode, Unicode, Unicode, Unicode, _returns=Unicode)
def Range_Query(self,tableName,start_t,stop_t,lat_start,lon_start,lat_stop,lon_stop):
# 这里的9090是HBase的提供服务的端口
transport = TSocket.TSocket('192.168.1.181', 9090)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = Hbase.Client(protocol)
transport.open()
list_dict = []
if start_t=='':
start_t='0'
if stop_t=='':
stop_t='2030'
startKey = start_t + '_' + lat_start + '_' + lon_start
stopKey = stop_t + '_' + lat_stop + '_' + lon_stop
#startKey = str(start_t).ljust(10, '0') + '_' + str("%3.2f" % float(lat_start)).rjust(6, '0') + '_' + str("%3.2f" % float(lon_start)).rjust(6, '0')
#stopKey = str(stop_t).ljust(10, '0') + '_' + str("%3.2f" % float(lat_stop)).rjust(6, '0') + '_' + str("%3.2f" % float(lon_stop)).rjust(6, '0')
scanner = client.scannerOpenWithStop(tableName, startKey, stopKey, [])
while True:
result = client.scannerGet(scanner) # 根据ScannerID来获取结果
if not result:
break
for dir in result:
dict = {
}
dict["time"] = dir.columns.get('info:time').value
dict["lat"] = dir.columns.get('info:lat').value
dict["lon"] = dir.columns.get('info:lon').value
if(tableName=="WL"):
dict["w_level"] = dir.columns.get('info:w_level').value
if(tableName=="AT"):
dict["a_temperature"] = dir.columns.get('info:a_temperature').value
if(tableName=="SLP"):
dict["pressure"] = dir.columns.get('info:pressure').value
if(tableName=="SST"):
dict[