Create a WebSocket server listening on ``host`` and ``port``. Whenever a client connects, the server creates a :class:`ServerConnection`, performs the opening handshake, and delegates to the ``handler``. The handler receives the :class:`ServerConnection` instance, which you can
(
handler: Callable[[ServerConnection], None],
host: str | None = None,
port: int | None = None,
*,
# TCP/TLS
sock: socket.socket | None = None,
ssl: ssl_module.SSLContext | None = None,
# WebSocket
origins: Sequence[Origin | re.Pattern[str] | None] | None = None,
extensions: Sequence[ServerExtensionFactory] | None = None,
subprotocols: Sequence[Subprotocol] | None = None,
select_subprotocol: (
Callable[
[ServerConnection, Sequence[Subprotocol]],
Subprotocol | None,
]
| None
) = None,
compression: str | None = "deflate",
# HTTP
process_request: (
Callable[
[ServerConnection, Request],
Response | None,
]
| None
) = None,
process_response: (
Callable[
[ServerConnection, Request, Response],
Response | None,
]
| None
) = None,
server_header: str | None = SERVER,
# Timeouts
open_timeout: float | None = 10,
ping_interval: float | None = 20,
ping_timeout: float | None = 20,
close_timeout: float | None = 10,
# Limits
max_size: int | None | tuple[int | None, int | None] = 2**20,
max_queue: int | None | tuple[int | None, int | None] = 16,
# Logging
logger: LoggerLike | None = None,
# Escape hatch for advanced customization
create_connection: type[ServerConnection] | None = None,
**kwargs: Any,
)
| 324 | |
| 325 | |
| 326 | def serve( |
| 327 | handler: Callable[[ServerConnection], None], |
| 328 | host: str | None = None, |
| 329 | port: int | None = None, |
| 330 | *, |
| 331 | # TCP/TLS |
| 332 | sock: socket.socket | None = None, |
| 333 | ssl: ssl_module.SSLContext | None = None, |
| 334 | # WebSocket |
| 335 | origins: Sequence[Origin | re.Pattern[str] | None] | None = None, |
| 336 | extensions: Sequence[ServerExtensionFactory] | None = None, |
| 337 | subprotocols: Sequence[Subprotocol] | None = None, |
| 338 | select_subprotocol: ( |
| 339 | Callable[ |
| 340 | [ServerConnection, Sequence[Subprotocol]], |
| 341 | Subprotocol | None, |
| 342 | ] |
| 343 | | None |
| 344 | ) = None, |
| 345 | compression: str | None = "deflate", |
| 346 | # HTTP |
| 347 | process_request: ( |
| 348 | Callable[ |
| 349 | [ServerConnection, Request], |
| 350 | Response | None, |
| 351 | ] |
| 352 | | None |
| 353 | ) = None, |
| 354 | process_response: ( |
| 355 | Callable[ |
| 356 | [ServerConnection, Request, Response], |
| 357 | Response | None, |
| 358 | ] |
| 359 | | None |
| 360 | ) = None, |
| 361 | server_header: str | None = SERVER, |
| 362 | # Timeouts |
| 363 | open_timeout: float | None = 10, |
| 364 | ping_interval: float | None = 20, |
| 365 | ping_timeout: float | None = 20, |
| 366 | close_timeout: float | None = 10, |
| 367 | # Limits |
| 368 | max_size: int | None | tuple[int | None, int | None] = 2**20, |
| 369 | max_queue: int | None | tuple[int | None, int | None] = 16, |
| 370 | # Logging |
| 371 | logger: LoggerLike | None = None, |
| 372 | # Escape hatch for advanced customization |
| 373 | create_connection: type[ServerConnection] | None = None, |
| 374 | **kwargs: Any, |
| 375 | ) -> Server: |
| 376 | """ |
| 377 | Create a WebSocket server listening on ``host`` and ``port``. |
| 378 | |
| 379 | Whenever a client connects, the server creates a :class:`ServerConnection`, |
| 380 | performs the opening handshake, and delegates to the ``handler``. |
| 381 | |
| 382 | The handler receives the :class:`ServerConnection` instance, which you can |
| 383 | use to send and receive messages. |
searching dependent graphs…