async def process_request(self, path, headers):
        """
        This hook is called to determine if the websocket should return
        an HTTP response and close.

        Our behavior here is to start the ASGI application, and then wait
        for either `accept` or `close` in order to determine if we should
        close the connection.
        """
        path_portion, _, query_string = path.partition("?")

        websockets.handshake.check_request(headers)

        subprotocols = []
        for header in headers.get_all("Sec-WebSocket-Protocol"):
            subprotocols.extend([token.strip() for token in header.split(",")])

        asgi_headers = [
            (name.encode("ascii"), value.encode("ascii"))
            for name, value in headers.raw_items()
        ]

        self.scope = {
            "type": "websocket",
            "scheme": self.scheme,
            "server": self.server,
            "client": self.client,
            "root_path": self.root_path,
            "path": unquote(path_portion),
            "query_string": query_string.encode("ascii"),
            "headers": asgi_headers,
            "subprotocols": subprotocols,
        }
        task = self.loop.create_task(self.run_asgi())
        task.add_done_callback(self.on_task_complete)
        self.tasks.add(task)
        await self.handshake_started_event.wait()
        return self.initial_response
async def process_request ( self , path , headers ) : path_portion , _ , query_string = path . partition ( "?" ) websockets . handshake . check_request ( headers ) subprotocols = [ ] for header in headers . get_all ( "Sec-WebSocket-Protocol" ) : subprotocols . extend ( [ token . strip ( ) for token in header . split ( "," ) ] ) asgi_headers = [ ( name . encode ( "ascii" ) , value . encode ( "ascii" ) ) for name , value in headers . raw_items ( ) ] self . scope = { "type" : "websocket" , "scheme" : self . scheme , "server" : self . server , "client" : self . client , "root_path" : self . root_path , "path" : unquote ( path_portion ) , "query_string" : query_string . encode ( "ascii" ) , "headers" : asgi_headers , "subprotocols" : subprotocols , } task = self . loop . create_task ( self . run_asgi ( ) ) task . add_done_callback ( self . on_task_complete ) self . tasks . add ( task ) await self . handshake_started_event . wait ( ) return self . initial_response
This hook is called to determine if the websocket should return
        an HTTP response and close.

        Our behavior here is to start the ASGI application, and then wait
        for either `accept` or `close` in order to determine if we should
        close the connection.