]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Add Russian translation for `docs/ru/docs/advanced/websockets.md` (#13279)
authorRishat-F <66554797+Rishat-F@users.noreply.github.com>
Mon, 3 Feb 2025 13:33:39 +0000 (16:33 +0300)
committerGitHub <noreply@github.com>
Mon, 3 Feb 2025 13:33:39 +0000 (13:33 +0000)
docs/ru/docs/advanced/websockets.md [new file with mode: 0644]

diff --git a/docs/ru/docs/advanced/websockets.md b/docs/ru/docs/advanced/websockets.md
new file mode 100644 (file)
index 0000000..bc9dfcb
--- /dev/null
@@ -0,0 +1,186 @@
+# Π’Π΅Π±-сокСты
+
+Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API" class="external-link" target="_blank">Π²Π΅Π±-сокСты</a> Π² **FastAPI**.
+
+## Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° `WebSockets`
+
+Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ [Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΡΡ€Π΅Π΄Π°](../virtual-environments.md){.internal-link target=_blank} ΡΠΎΠ·Π΄Π°Π½Π°, Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Ρ‘ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ `websockets`:
+
+<div class="termy">
+
+```console
+$ pip install websockets
+
+---> 100%
+```
+
+</div>
+
+## ΠšΠ»ΠΈΠ΅Π½Ρ‚ WebSockets
+
+### Π Π°Π±ΠΎΡ‡Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
+
+Π‘ΠΊΠΎΡ€Π΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π² Π²Π°ΡˆΠ΅ΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡ‚Π΅ΠΌΠ΅ Π΅ΡΡ‚ΡŒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² React, Vue.js ΠΈΠ»ΠΈ Angular.
+
+И Π½Π°Π²Π΅Ρ€Π½ΡΠΊΠ° Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚вия Ρ Π±Π΅ΠΊΠ΅Π½Π΄ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· Π²Π΅Π±-сокСты Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ€Π΅Π΄ΡΡ‚Π²Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°.
+
+Π’Π°ΠΊΠΆΠ΅ Ρƒ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ Ρ Π²Π΅Π±-сокСтами Π½Π° Π±Π΅ΠΊΠ΅Π½Π΄-сСрвСрС.
+
+Π›ΠΈΠ±ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚вия Ρ Π²Π΅Π±-сокСтами.
+
+---
+
+Но Π΄Π»Ρ ΡΡ‚ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΎΡΡ‚Ρ‹ΠΌ HTML Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΠΌΠΈ Π²ΡΡ‚Π°Π²ΠΊΠ°ΠΌΠΈ JavaScript ΠΊΠΎΠ΄Π°.
+
+ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ ΡΡ‚ΠΎ Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‚Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ ΡΡ‚ΠΎΠΈΡ‚.
+
+Π’ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ… ΡΡ‚ΠΎΠΈΡ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… ΡΠΏΠΎΡΠΎΠ±ΠΎΠ².
+
+Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΡΡ‚ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΠΈ Π²Π΅Π±-сокСтов ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄:
+
+{* ../../docs_src/websockets/tutorial001.py hl[2,6:38,41:43] *}
+
+## Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ `websocket`
+
+Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ `websocket` Π² ΡΠ²ΠΎΠ΅ΠΌ **FastAPI** ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:
+
+{* ../../docs_src/websockets/tutorial001.py hl[1,46:47] *}
+
+/// note | Π’СхничСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ
+
+Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `from starlette.websockets import WebSocket`.
+
+**FastAPI** Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΡΠ°ΠΌΡ‹ΠΉ `WebSocket` ΠΏΡ€ΠΎΡΡ‚ΠΎ Π΄Π»Ρ ΡƒΠ΄ΠΎΠ±ΡΡ‚Π²Π°. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡ‚ΠΎ `WebSocket` ΠΈΠ· Starlette.
+
+///
+
+## ΠžΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ
+
+Π§Π΅Ρ€Π΅Π· ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ‚ Π²Π΅Π±-сокСта Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ.
+
+{* ../../docs_src/websockets/tutorial001.py hl[48:52] *}
+
+Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅, Ρ‚СкстовыС ΠΈ JSON Π΄Π°Π½Π½Ρ‹Π΅.
+
+## ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠΈ
+
+Если Π²Π°Ρˆ Ρ„Π°ΠΉΠ» Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ся `main.py`, Ρ‚ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
+
+<div class="termy">
+
+```console
+$ fastapi dev main.py
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a>.
+
+Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΡƒΡŽ ΡΡ‚Ρ€Π°Π½ΠΈΡ†Ρƒ:
+
+<img src="/img/tutorial/websockets/image01.png">
+
+Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ…:
+
+<img src="/img/tutorial/websockets/image02.png">
+
+И Π²Π°ΡˆΠ΅ **FastAPI** ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ Π²Π΅Π±-сокСтами ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚:
+
+<img src="/img/tutorial/websockets/image03.png">
+
+Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ:
+
+<img src="/img/tutorial/websockets/image04.png">
+
+И Π²ΡΠ΅ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π²Π΅Π±-сокСт ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅.
+
+## Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ `Depends` ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ
+
+Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· `fastapi` ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ‚Π΅ Π²Π΅Π±ΡΠΎΠΊΠ΅Ρ‚Π°:
+
+* `Depends`
+* `Security`
+* `Cookie`
+* `Header`
+* `Path`
+* `Query`
+
+Они Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… FastAPI ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ‚Π°Ρ…/*опСрациях ΠΏΡƒΡ‚ΠΈ*:
+
+{* ../../docs_src/websockets/tutorial002_an_py310.py hl[68:69,82] *}
+
+/// info | ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
+
+Π’ Π²Π΅Π±-сокСтС Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ `HTTPException` Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΌΡ‹ΡΠ»Π°. Π’мСсто ΡΡ‚ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ `WebSocketException`.
+
+Π—Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΡΡ‚атус ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· <a href="https://tools.ietf.org/html/rfc6455#section-7.4.1" class="external-link" target="_blank">valid codes defined in the specification</a>.
+
+///
+
+### Π’Π΅Π±-сокСты Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ями: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠΈ
+
+Если Π²Π°Ρˆ Ρ„Π°ΠΉΠ» Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ся `main.py`, Ρ‚ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
+
+<div class="termy">
+
+```console
+$ fastapi dev main.py
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a>.
+
+Π’Π°ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ:
+
+* "Item ID", ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² ΠΏΡƒΡ‚ΠΈ.
+* "Token", ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠ°ΠΊ query-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.
+
+/// tip | ΠŸΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°
+
+ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ query-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `token` Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ.
+
+///
+
+Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π²Π΅Π±-сокСту ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ:
+
+<img src="/img/tutorial/websockets/image05.png">
+
+## ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° Ρ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ
+
+Если Π²Π΅Π±-сокСт ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ, Ρ‚ΠΎ `await websocket.receive_text()` Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ `WebSocketDisconnect`, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π² ΡΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:
+
+{* ../../docs_src/websockets/tutorial003_py39.py hl[79:81] *}
+
+Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΡΡ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
+
+* ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΊΠ»Π°Π΄ΠΊΠ°Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.
+* ΠžΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ ΠΈΠ· Π½ΠΈΡ… ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ.
+* Π—Π°Ρ‚Π΅ΠΌ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π²ΠΊΠ»Π°Π΄ΠΎΠΊ.
+
+Π­Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ `WebSocketDisconnect`, ΠΈ Π²ΡΠ΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅:
+
+```
+Client #1596980209979 left the chat
+```
+
+/// tip | ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
+
+ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹ΡˆΠ΅ - ΡΡ‚ΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡˆΡŒ ΠΏΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌ Π²Π΅Π±-сокСт ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΠΌ.
+
+Но ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΡΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠΊΠ° ΠΎΠ½ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²ΡΡ‘ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚ываСтся Π² ΠΏΡ€ΠΎΡΡ‚ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡ‚ΠΈ.
+
+Если Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ Ρ FastAPI, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ΅ ΠΈ Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Redis, PostgreSQL ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ <a href="https://github.com/encode/broadcaster" class="external-link" target="_blank">encode/broadcaster</a>.
+
+///
+
+## Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΈΠ½Ρ„ормация
+
+Для Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡ Ρ‚Π΅ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ Starlette:
+
+* <a href="https://www.starlette.io/websockets/" class="external-link" target="_blank">The `WebSocket` class</a>.
+* <a href="https://www.starlette.io/endpoints/#websocketendpoint" class="external-link" target="_blank">Class-based WebSocket handling</a>.