code: 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
docs: 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.