text: Title: websockets.exceptions.ConnectionClosedError - while performing simple load test on webscokets 
  Body: I'm performing simple load test on FastApi websockets using [artillery](https://www.artillery.io/) and I'm seeing below error sometimes (can't really say this error is because of increase in load, sometimes I see this error for very first connection also)
  
  **error**
  ```py
  websockets.exceptions.ConnectionClosedError: received 1005 (no status code [internal]); then sent 1005 (no status code [internal])
  ```
  
  **Code**
  
  ```py
  from typing import List
  
  import uvicorn
  from fastapi import FastAPI, WebSocket
  
  app = FastAPI()
  
  
  class ConnectionManager:
      def __init__(self):
          self.active_connections: List[WebSocket] = []
  
      async def connect(self, websocket: WebSocket):
          await websocket.accept()
          self.active_connections.append(websocket)
  
      def disconnect(self, websocket: WebSocket):
          self.active_connections.remove(websocket)
  
      async def send_personal_message(self, message: str, websocket: WebSocket):
          await websocket.send_text(message)
  
      async def broadcast(self, message: str):
          for connection in self.active_connections:
              await connection.send_text(message)
  
  
  @app.websocket('/ws')
  async def stt(ws: WebSocket):
      await manager.connect(ws)
      print("Connection accepted")
      message = await ws.receive_text()
      print(f"received message: {message}")
      await ws.send_text(f"You said: {message}")
  
  
  if __name__ == '__main__':
      manager = ConnectionManager()
      uvicorn.run(app=app, port=8082)
  ```
  
  So here getting the above error while sending back received text back to client, at below line
  ```py
      await ws.send_text(f"You said: {message}")
  ```
  
  **Complete Stack trace**
  ```py
  ERROR:    Exception in ASGI application
  Traceback (most recent call last):
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/uvicorn/protocols/websockets/websockets_impl.py", line 254, in run_asgi
      result = await self.app(self.scope, self.asgi_receive, self.asgi_send)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
      return await self.app(scope, receive, send)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/fastapi/applications.py", line 270, in __call__
      await super().__call__(scope, receive, send)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/starlette/applications.py", line 124, in __call__
      await self.middleware_stack(scope, receive, send)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/starlette/middleware/errors.py", line 149, in __call__
      await self.app(scope, receive, send)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/starlette/middleware/exceptions.py", line 51, in __call__
      await self.app(scope, receive, send)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
      raise e
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
      await self.app(scope, receive, send)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/starlette/routing.py", line 680, in __call__
      await route.handle(scope, receive, send)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/starlette/routing.py", line 334, in handle
      await self.app(scope, receive, send)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/starlette/routing.py", line 81, in app
      await func(session)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/fastapi/routing.py", line 287, in app
      await dependant.call(**values)
    File "/Users/swastikn/my-projects/speech_to_text/sst/ws.py", line 35, in stt
      await ws.send_text(f"You said: {message}")
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/starlette/websockets.py", line 163, in send_text
      await self.send({"type": "websocket.send", "text": data})
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/starlette/websockets.py", line 85, in send
      await self._send(message)
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/uvicorn/protocols/websockets/websockets_impl.py", line 327, in asgi_send
      await self.send(data)  # type: ignore[arg-type]
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/websockets/legacy/protocol.py", line 635, in send
      await self.ensure_open()
    File "/Users/swastikn/my-projects/speech_to_text/venv/lib/python3.7/site-packages/websockets/legacy/protocol.py", line 953, in ensure_open
      raise self.connection_closed_exc()
  websockets.exceptions.ConnectionClosedError: received 1005 (no status code [internal]); then sent 1005 (no status code [internal])
  INFO:     connection closed
  ```
  
  **artillery config.yml**
  ```yml
  config:
    target: "ws://127.0.0.1:8082/ws"
    ws:
      maxRedirects: 25
    phases:
      - duration: 3
        arrivalRate: 1
        rampTo: 3
        name: "Max load"
  scenarios:
    - engine: "ws"
      flow:
        - send: "hello world"
   ```
  
  **Note**
  
  1. `uvicorn==0.19.0` (can reproduce issue with newer version **0.21.1** also)
  2. `fastapi==0.86.0`
  3. `websockets==10.4`
  
  
  
  
  <!-- POLAR PLEDGE BADGE START -->
  > [!IMPORTANT]
  > - We're using [Polar.sh](https://polar.sh/encode) so you can upvote and help fund this issue.
  > - We receive the funding once the issue is completed & confirmed by you.
  > - Thank you in advance for helping prioritize & fund our backlog.
  
  <a href="https://polar.sh/encode/uvicorn/issues/1910">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://polar.sh/api/github/encode/uvicorn/issues/1910/pledge.svg?darkmode=1">
    <img alt="Fund with Polar" src="https://polar.sh/api/github/encode/uvicorn/issues/1910/pledge.svg">
  </picture>
  </a>
  <!-- POLAR PLEDGE BADGE END -->
  