server.py
tornado 是順序調用的,當其中一個handler(比如post)正在運行還沒返回結果的時候。調用其它handler是沒有反應的,如果需要就得用攜程編程
from tornado import web, ioloop, httpserver
import json
import numpy as np
import cv2
# tornado 是順序調用的,當其中一個handler(比如post)正在運行還沒返回結果的時候。調用其它handler是沒有反應的,如果需要就得用攜程編程
# 按 json 格式傳遞數據
class Request_Json_Handler(web.RequestHandler):
def post(self):
app = self.application
state = app._state
state = 1
info_dic = json.loads(self.request.body.encode('utf-8'))
print(type(info_dic))
print(info_dic)
respond_dic = {"code": 1, "state": state, "msg": "recive json success ..."}
self.finish(respond_dic)
# 按 formdata 格式傳遞數據
class Request_formdata_Handler(web.RequestHandler):
def post(self):
app = self.application
state = app._state
state = 2
sid = self.request.arguments["session_id"][0].encode('utf-8')
file_metas = self.request.files["pic"]
for meta in file_metas:
file_content = meta["body"]
img = np.frombuffer(file_content, dtype=np.uint8)
img = cv2.imdecode(img, 1)
respond_dic = {"code": 1, "state": state, "msg": "recive formdata success ..."}
self.finish(respond_dic)
# 帶參數請求
class Get_State_Handler(web.RequestHandler):
def get(self, sid):
print(sid)
app = self.application
state = app._state
state = 3
respond_dic = {"code": 1, "state": state, "msg": "recive body success ..."}
self.finish(respond_dic)
class Application(web.Application):
def __init__(self):
handler = [
(r'/process/request_json', Request_Json_Handler),
(r'/process/request_formdata', Request_formdata_Handler),
(r'/process/get_state/?(?P<sid>.+)?', Get_State_Handler)
]
web.Application.__init__(self, handlers=handler)
# 全局變量
# 只有寫在這裏纔可以所有handler公用,寫在外面不管用
self._state = 0
def make_app():
ioloop_t = ioloop.IOLoop()
httpserver_t = httpserver.HTTPServer(Application())
httpserver_t.listen(8889)
ioloop_t.start()
if __name__ == "__main__":
make_app()
client.py
import requests
import json
json_url = 'http://172.12.6.61:8889/process/request_json'
formdata_url = 'http://172.12.6.61:8889/process/request_formdata'
get_url = 'http://172.12.6.61:8889/process/get_state'
def request_json():
info_dic = {"session_id": 1, "motion":"高興"}
respon = requests.post(json_url, data = json.dumps(info_dic))
# ???? encode 好像對字典不起作用
r_dic = json.loads(respon.content.encode('utf-8'))
print(r_dic)
def request_formdata():
session_id = 2
pic_path = "/home/gunn/csdn/1.png"
formdata = {
'pic': ('/home/gunn/csdn/1.png', open('/home/gunn/csdn/1.png', 'rb')),
'session_id': (None, str(session_id)),
}
respons = requests.post(formdata_url, files=formdata)
# ???
r_dic = json.loads(respons.content.encode('utf-8'))
print(r_dic)
def get_state():
session_id = '33'
url = get_url + '/' + session_id
respons = requests.get(url)
r_dic = json.loads(respons.content.decode("utf-8"))
print(r_dic)
if __name__ == "__main__":
request_json()
request_formdata()
get_state()