mirror of
https://github.com/home-assistant/core.git
synced 2025-04-26 18:27:51 +00:00

* Increase websocket peak messages to match max expected entities During startup the websocket would frequently disconnect if more than 4096 entities were added back to back. Some MQTT setups will have more than 10000 entities. Match the websocket peak value to the max expected entities * coalesce more * delay more if the backlog gets large * wait to send if the queue is building rapidly * tweak * tweak for chrome since it works great in firefox but chrome cannot handle it * Revert "tweak for chrome since it works great in firefox but chrome cannot handle it" This reverts commit 439e2d76b11d2355c552c8a577d0e85fc7262808. * adjust for chrome * lower number * remove code * fixes * fast path for bytes * compact * adjust test since we see the close right away now on overload * simplify check * reduce loop * tweak * handle ready right away
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
"""Websocket constants."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Awaitable, Callable
|
|
from typing import TYPE_CHECKING, Any, Final
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
if TYPE_CHECKING:
|
|
from .connection import ActiveConnection
|
|
|
|
|
|
type WebSocketCommandHandler = Callable[
|
|
[HomeAssistant, ActiveConnection, dict[str, Any]], None
|
|
]
|
|
type AsyncWebSocketCommandHandler = Callable[
|
|
[HomeAssistant, ActiveConnection, dict[str, Any]], Awaitable[None]
|
|
]
|
|
|
|
DOMAIN: Final = "websocket_api"
|
|
URL: Final = "/api/websocket"
|
|
PENDING_MSG_PEAK: Final = 1024
|
|
PENDING_MSG_PEAK_TIME: Final = 5
|
|
# Maximum number of messages that can be pending at any given time.
|
|
# This is effectively the upper limit of the number of entities
|
|
# that can fire state changes within ~1 second.
|
|
# Ideally we would use homeassistant.const.MAX_EXPECTED_ENTITY_IDS
|
|
# but since chrome will lock up with too many messages we need to
|
|
# limit it to a lower number.
|
|
MAX_PENDING_MSG: Final = 4096
|
|
|
|
# Maximum number of messages that are pending before we force
|
|
# resolve the ready future.
|
|
PENDING_MSG_MAX_FORCE_READY: Final = 256
|
|
|
|
ERR_ID_REUSE: Final = "id_reuse"
|
|
ERR_INVALID_FORMAT: Final = "invalid_format"
|
|
ERR_NOT_ALLOWED: Final = "not_allowed"
|
|
ERR_NOT_FOUND: Final = "not_found"
|
|
ERR_NOT_SUPPORTED: Final = "not_supported"
|
|
ERR_HOME_ASSISTANT_ERROR: Final = "home_assistant_error"
|
|
ERR_SERVICE_VALIDATION_ERROR: Final = "service_validation_error"
|
|
ERR_UNKNOWN_COMMAND: Final = "unknown_command"
|
|
ERR_UNKNOWN_ERROR: Final = "unknown_error"
|
|
ERR_UNAUTHORIZED: Final = "unauthorized"
|
|
ERR_TIMEOUT: Final = "timeout"
|
|
ERR_TEMPLATE_ERROR: Final = "template_error"
|
|
|
|
TYPE_RESULT: Final = "result"
|
|
|
|
|
|
# Event types
|
|
SIGNAL_WEBSOCKET_CONNECTED: Final = "websocket_connected"
|
|
SIGNAL_WEBSOCKET_DISCONNECTED: Final = "websocket_disconnected"
|
|
|
|
# Data used to store the current connection list
|
|
DATA_CONNECTIONS: Final = f"{DOMAIN}.connections"
|
|
|
|
FEATURE_COALESCE_MESSAGES = "coalesce_messages"
|