# WebSockets

When defining WebSockets, you normally declare a parameter of type `WebSocket` and
with it you can read data from the client and send data to it.

It is provided directly by Starlette, but you can import it from `fastapi`:

```python
from fastapi import WebSocket
```

!!! tip
    When you want to define dependencies that should be compatible with both HTTP and
    WebSockets, you can define a parameter that takes an `HTTPConnection` instead of a
    `Request` or a `WebSocket`.

::: fastapi.WebSocket
    options:
        members:
            - scope
            - app
            - url
            - base_url
            - headers
            - query_params
            - path_params
            - cookies
            - client
            - state
            - url_for
            - client_state
            - application_state
            - receive
            - send
            - accept
            - receive_text
            - receive_bytes
            - receive_json
            - iter_text
            - iter_bytes
            - iter_json
            - send_text
            - send_bytes
            - send_json
            - close

When a client disconnects, a `WebSocketDisconnect` exception is raised, you can catch
it.

You can import it directly form `fastapi`:

```python
from fastapi import WebSocketDisconnect
```

::: fastapi.WebSocketDisconnect

## WebSockets - additional classes

Additional classes for handling WebSockets.

Provided directly by Starlette, but you can import it from `fastapi`:

```python
from fastapi.websockets import WebSocketDisconnect, WebSocketState
```

::: fastapi.websockets.WebSocketDisconnect

::: fastapi.websockets.WebSocketState
