Асинхронність

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

Бібліотека JsonRpcBundle активно використовує асинхронність для обробки запитів, що дозволяє значно підвищити ефективність взаємодії з API та продуктивність системи.

Асинхронність в синхронних запитах

Коли з боку клієнта приходить HTTP batch-запит або запит з callback, на сервері насправді відбувається асинхронна обробка даних завдяки механізму Symfony Process

Batch-запити

Batch-запити дозволяють об'єднати декілька запитів в один, що знижує навантаження на мережу та сервер. Сервер отримує один запит, який містить кілька операцій, обробляє їх асинхронно та повертає одну відповідь з результатами всіх операцій.

Callback-запити

Запити з callback використовують параметр $rpc.callback, який містить DSN для зворотного виклику. Сервер приймає запит, валідовує DSN, миттєво повертає відповідь з підтвердженням прийняття запиту, обробляє його асинхронно та відправляє результат на вказаний callback URL.

Використання асинхронного транспорту для RPC

Другий варіант передбачає налаштування параметра async:rpc_async, який приймає DSN підключення до асинхронного транспорту, такого як RabbitMQ, Redis, Kafka тощо. В такому випадку RPC сервер використовує Symfony Messenger.

Цей механізм знаходиться на ранньому етапі впровадження і ще немає деатльно описаних механік

Підключення асинхронного транспорту

Щоб підняти консюмера, необхідно виконати команду:

php bin/console messenger:consume rpc-async

Це підніме RPC сервер як слухача вказаного транспорту, і він буде обробляти всі RPC запити, які надходять через цей канал.

Переваги використання асинхронного транспорту

  1. Масштабованість: Використання асинхронного транспорту дозволяє легко масштабувати систему, додаючи нові консьюмери.
  2. Висока продуктивність: Асинхронний транспорт забезпечує швидку обробку великої кількості запитів, розподіляючи навантаження між різними компонентами системи.
  3. Надійність: Використання таких транспортувальників, як RabbitMQ або Kafka, гарантує надійну доставку повідомлень і обробку запитів.

Використовуючи ці можливості асинхронності, ви зможете значно покращити продуктивність вашої системи та забезпечити більш зручний і швидкий обмін даними між клієнтом та сервером.