Wiki source code of Асинхронність

Last modified by Ashterix on 2024/05/17 11:34

Show last authors
1 {{box cssClass="floatinginfobox" title="**Contents**"}}
2 {{toc/}}
3 {{/box}}
4
5 (% class="box infomessage" %)
6 (((
7 The JsonRpcBundle library actively uses asynchronous processing for handling requests, which significantly improves API interaction efficiency and system performance.
8 )))
9
10 = Asynchronous Processing in Synchronous Requests =
11
12 When a client sends an HTTP [[batch request>>doc:docs.JsonRpcBundle.functionality.batch.WebHome]] or a [[callback request>>doc:docs.JsonRpcBundle.functionality.callback.WebHome]], the server actually processes the data asynchronously using the [[Symfony Process>>https://symfony.com/doc/current/components/process.html]] mechanism.
13
14 == ##Batch Requests## ==
15
16 Batch requests allow combining multiple requests into one, reducing network and server load. The server receives a single request containing multiple operations, processes them asynchronously, and returns a single response with the results of all operations.
17
18 == ##Callback Requests## ==
19
20 Callback requests use the {{code language="none"}}$rpc.callback{{/code}} parameter, which contains a DSN for the callback. The server accepts the request, validates the DSN, immediately returns a confirmation response, processes the request asynchronously, and sends the result to the specified callback URL.
21
22 = Using Asynchronous Transport for RPC =
23
24 The second option involves configuring the parameter [[ {{code language="none"}}async:rpc_async{{/code}}>>https://docs.ufo-tech.space/bin/view/docs/JsonRpcBundle/config#H41143B43E43AA0-1]], which accepts a DSN for connecting to asynchronous transport such as RabbitMQ, Redis, Kafka, etc. In this case, the RPC server uses the [[Symfony Messenger>>https://symfony.com/doc/current/components/messenger.html]].
25
26 (% class="box warningmessage" %)
27 (((
28 This mechanism is in the early stages of implementation and does not yet have detailed mechanics described.
29 )))
30
31 == ##Connecting Asynchronous Transport## ==
32
33 To start the consumer, you need to run the command:
34
35 {{code language="bash"}}
36 php bin/console messenger:consume rpc-async
37 {{/code}}
38
39 This will start the RPC server as a listener for the specified transport, and it will process all RPC requests that come through this channel.
40
41 == ##Advantages of Using Asynchronous Transport## ==
42
43 1. **Scalability**: Using asynchronous transport allows easy system scaling by adding new consumers.
44 2. **High Performance**: Asynchronous transport ensures fast processing of a large number of requests by distributing the load among different system components.
45 3. **Reliability**: Using transport systems like RabbitMQ or Kafka guarantees reliable message delivery and request processing.
46
47 By utilizing these asynchronous capabilities, you can significantly improve your system's performance and provide a more convenient and faster data exchange between the client and the server.