To allow a client to submit a sequence of asynchronous requests over the same session-managed connection or the same session-free binding, OpenEdge maintains a queuing system to manage such requests between the client and the AppServer or application service. OpenEdge handles multiple asynchronous requests in this queuing system differently, depending on the session model:
Session-managed connections — The AppServer can execute only one asynchronous request at a time over a single client connection. So, results from session-managed asynchronous requests are returned to the client in the order they are sent.
Session-free bindings — The application service can handle multiple asynchronous requests from the same client in parallel. So, results from session-free asynchronous requests are returned to the client in no predictable order.
Therefore, you just write your application to account for the difference in how results are returned for each session model.
Regardless of the session model, the asynchronous request queuing system is the same, and includes three queues:
One send queue per AppServer connection, for queuing asynchronous requests to the AppServer.
One response queue per AppServer connection, for queuing the results of each asynchronous request.
The ABL event queue on the client for handling all ABL events, including user-interface and other events, such as PROCEDURE-COMPLETE. This event queue handles the PROCEDURE-COMPLETE event for all AppServer connections on a client.