如何让WSGI服务器在每次响应后关闭一个连接?

2024-04-20 09:52:59 发布

您现在位置:Python中文网/ 问答频道 /正文

Python的wsgiref moduleAPI排除了hop-by-hop头(如RFC 2616中所定义)。在

我不清楚如何让服务器在响应后终止连接(因为似乎没有办法添加Connection: close)。在

这个问题在测试小型WSGI应用程序和Bottle微服务时出现。来自curl的调用被来自浏览器的打开连接阻止。我必须单击浏览器刷新来终止连接,这样挂起的curl请求就可以得到响应。在

显然,这应该是服务器端的决定(在响应后终止连接),而不是客户端。我不清楚如何实现这一点。在


Tags: 服务器应用程序wsgibottlecloseby定义rfc
1条回答
网友
1楼 · 发布于 2024-04-20 09:52:59

这实际上是基于您通过的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

你可以清除白噪音和瓶子配置,如果他们不是必要的,我把他们作为一个例子,并建议你使用他们,如果这是朝外的。在

这在每个连接上都是完全异步的。在

相关问题 更多 >