Вікі-код для Асинхронність

Остання зміна 2024/05/17 11:30 автором Ashterix

Показати останніх авторів
1 {{box cssClass="floatinginfobox" title="**Зміст**"}}
2 {{toc/}}
3 {{/box}}
4
5 (% class="box infomessage" %)
6 (((
7 Бібліотека JsonRpcBundle активно використовує асинхронність для обробки запитів, що дозволяє значно підвищити ефективність взаємодії з API та продуктивність системи.
8 )))
9
10 = Асинхронність в синхронних запитах =
11
12 Коли з боку клієнта приходить HTTP [[batch-запит>>doc:docs.JsonRpcBundle.functionality.batch.WebHome]] або [[запит з callback>>doc:docs.JsonRpcBundle.functionality.callback.WebHome]], на сервері насправді відбувається асинхронна обробка даних завдяки механізму [[Symfony Process>>https://symfony.com/doc/current/components/process.html]].
13
14 == ##Batch-запити## ==
15
16 Batch-запити дозволяють об'єднати декілька запитів в один, що знижує навантаження на мережу та сервер. Сервер отримує один запит, який містить кілька операцій, обробляє їх асинхронно та повертає одну відповідь з результатами всіх операцій.
17
18 == ##Callback-запити## ==
19
20 Запити з callback використовують параметр {{code language="none"}}$rpc.callback{{/code}}, який містить DSN для зворотного виклику. Сервер приймає запит, валідовує DSN, миттєво повертає відповідь з підтвердженням прийняття запиту, обробляє його асинхронно та відправляє результат на вказаний callback URL.
21
22 = Використання асинхронного транспорту для RPC =
23
24 Другий варіант передбачає налаштування параметра[[ {{code language="none"}}async:rpc_async{{/code}}>>https://docs.ufo-tech.space/bin/view/docs/JsonRpcBundle/config#H41143B43E43AA0-1]], який приймає DSN підключення до асинхронного транспорту, такого як RabbitMQ, Redis, Kafka тощо. В такому випадку RPC сервер використовує [[Symfony Messenger>>https://symfony.com/doc/current/components/messenger.html]].
25
26 (% class="box warningmessage" %)
27 (((
28 Цей механізм знаходиться на ранньому етапі впровадження і ще немає деатльно описаних механік
29 )))
30
31 == ##Підключення асинхронного транспорту## ==
32
33 Щоб підняти консюмера, необхідно виконати команду:
34
35 {{code language="bash"}}
36 php bin/console messenger:consume rpc-async
37 {{/code}}
38
39 Це підніме RPC сервер як слухача вказаного транспорту, і він буде обробляти всі RPC запити, які надходять через цей канал.
40
41 == ##Переваги використання асинхронного транспорту## ==
42
43 1. **Масштабованість**: Використання асинхронного транспорту дозволяє легко масштабувати систему, додаючи нові консьюмери.
44 1. **Висока продуктивність**: Асинхронний транспорт забезпечує швидку обробку великої кількості запитів, розподіляючи навантаження між різними компонентами системи.
45 1. **Надійність**: Використання таких транспортувальників, як RabbitMQ або Kafka, гарантує надійну доставку повідомлень і обробку запитів.
46
47 Використовуючи ці можливості асинхронності, ви зможете значно покращити продуктивність вашої системи та забезпечити більш зручний і швидкий обмін даними між клієнтом та сервером.