Как заставить серверы WSGI закрывать соединение после каждого ответа? - PullRequest
0 голосов
/ 22 декабря 2018

API для модуля Python wsgiref исключает переход за хопом заголовки (как определено в RFC 2616 ).

Мне неясно, как заставить сервер завершить соединение после ответа (поскольку, кажется, нет способа добавить Connection: close).

Эта проблема возникаетв тестировании небольших приложений WSGI и микро-сервисов Bottle .Звонки с номера curl блокируются открытыми соединениями из браузера.Я должен щелкнуть обновление браузера, чтобы разорвать соединение, чтобы на ожидающий запрос скручивания могли быть получены ответы.

Очевидно, это должно быть решение на стороне сервера (разорвать соединение после ответа), а не на стороне клиента.Мне неясно, как это реализовать.

1 Ответ

0 голосов
/ 27 декабря 2018

Это действительно зависит от вашего WSGI-сервера, на котором вы размещаете свою платформу.Лучшее решение с бутылкой - провести ее через гевент.

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

Вы можете очистить конфиги с белым шумом и бутылками, если они не нужны, я оставил их там в качестве примера и предлагаю использовать их, если они обращены наружу.

Это чисто асинхронный на каждом соединении.

...