2013-10-03 43 views
0

有沒有什麼辦法可以在gevent中運行tornado.httpserver.HTTPServer?Gevent + tornado.httpserver.HTTPServer

我正在爲一個大文件上傳寫一個簡單的代理服務器,這個想法很簡單 - 它監視一堆服務器上的可用空間(到目前爲止沒有問題),並且應該將PUT請求路由到WebDAV服務器。爲了提高效率,我想按塊大小地分塊,並且不能提供基於gevent的pywsgi的解決方案。

settings = setup() 
log.info('Listening on %s:%d' % (settings.host, settings.port)) 

# server for request routing 
server = WSGIServer((settings.host, settings.port), app) 

# separate greenlet to periodically get info about cluster free space 
monitor = gevent.spawn(storage_monitor, settings.timeout) 

# setup a proper signals to stop server and monitor greenlet 
gevent.signal(signal.SIGTERM, monitor.kill) 
gevent.signal(signal.SIGINT, monitor.kill) 
gevent.signal(signal.SIGQUIT, monitor.kill) 

gevent.signal(signal.SIGTERM, server.stop) 
gevent.signal(signal.SIGINT, server.stop) 
gevent.signal(signal.SIGQUIT, server.stop) 

# start the server 
server.start() 
gevent.wait() 

也許我只是不明白一些東西?由於gevent文檔沒有更新到1.0,但它是一項相當艱鉅的任務:)

也許最好是用戶gevent的StreamServer +自定義協議?

回答

2

可以將Tornado和greenlet風格的併發結合起來(例如參見Motorthis question的頂部答案),但它很複雜,主要用作同步和異步世界之間的橋樑。在一個新項目中,我會敦促你選擇一種風格並堅持下去,而不是結合多個複雜的框架。其次,Tornado的HTTPServer目前不支持流媒體請求,所以它也不會給你你想要的。我認爲Twisted會這樣做,但我會再次推薦選擇Twisted或gevent,而不是試圖將它們結合起來。

+0

謝謝你的回覆,我已經決定了。我只是使用沒有HTTP的StreamServer。 我會盡快將它發佈在這裏 – irqed