Это довольно легко сделать в транке (который в конечном итоге будет 3.2 финальным).Я уверен, что это возможно в более старых версиях, но гораздо более запутанно.
Все, что вам нужно сделать, - это создать новый подкласс wsgiserver.Gateway
, который ищет соответствующие заголовки, а затем либо отложить соединение, либо продолжитьк обычным воротам.Например:
class UpgradeGateway(Gateway):
def respond(self):
h = self.req.inheaders
if h.get("Connection", "") == "Upgrade":
# Turn off auto-output of HTTP response headers
self.req.sent_headers = True
# Not sure exactly what you want to pass or how, here's a start...
return protocols[h['Upgrade']].handle(self.req.rfile, self.req.wfile)
else:
return old_gateway(self.req).respond()
old_gateway = cherrypy.server.httpserver.gateway
cherrypy.server.httpserver.gateway = UpgradeGateway
Может быть пара других тонкостей, но это общая техника.