簡體   English   中英

如何在每次響應后讓WSGI服務器關閉連接?

[英]How to get WSGI servers to close a connection after each response?

Python的wsgiref模塊的API排除了逐跳頭(如RFC 2616中所定義)。

我不清楚如何讓服務器在響應后終止連接(因為似乎沒有辦法添加Connection: close )。

測試小型WSGI應用程序和Bottle微服務時出現此問題。 來自curl的調用被來自瀏覽器的打開連接阻止。 我必須單擊瀏覽器刷新以終止連接,以便掛起的卷曲請求可以是答案。

顯然,這應該是服務器端決策(響應后終止連接)而不是客戶端。 我不清楚如何實現這一點。

這實際上取決於您通過托管框架的WSGI服務器。 瓶子的最佳解決方案是通過gevent運行它。

botapp = bottle.app()
for Route in (mainappRoute,): #handle multiple files containing routes
    botapp.merge(Route)
botapp = SessionMiddleware(botapp, beakerconfig) #in case you are using beaker sessions
botapp = WhiteNoise(botapp) #in case you want whitenoise to handle static files
botapp.add_files(staticfolder, prefix='static/') #add static route to whitenoise
server = WSGIServer(("0.0.0.0", int(80)), botapp) #gevent async web server
def shutdown():
    print('Shutting down ...')
    server.stop(timeout=60)
    exit(signal.SIGTERM)
gevent.signal(signal.SIGTERM, shutdown)
gevent.signal(signal.SIGINT, shutdown) #CTRL C
server.serve_forever() #spawn the server

如果沒有必要,你可以清除whitenoise和瓶子配置,我把它們作為一個例子保存在那里,並建議你使用它們,如果它是朝外的。

這在每個連接上都是完全異步的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM