Вікі-код для Асинхронність
Остання зміна 2024/05/17 11:30 автором Ashterix
Сховати останніх авторів
| author | version | line-number | content |
|---|---|---|---|
| |
2.1 | 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 | Використовуючи ці можливості асинхронності, ви зможете значно покращити продуктивність вашої системи та забезпечити більш зручний і швидкий обмін даними між клієнтом та сервером. |