A concurrent
server accepts a client connection, delegates the connection to a
child process of some kind, and immediately signals its availability
to receive the next client connection.
The following list describes the concurrent server process.
- When a connection request arrives in the main process of a concurrent
server, it schedules a child process and forwards the connection to
the child process.
- The child process takes the connection from the main process.
- The child process receives the client request, processes it, and
returns a reply to the client.
- The connection is closed, and the child process terminates or
signals to the main process that it is available for a new connection.
You can implement a concurrent server in the following MVS™ environments:
- Native MVS (batch job, started
task, or TSO). In this environment you implement concurrency by using
traditional MVS subtasking facilities.
These facilities are available from assembler language programs or
from high-level languages that support multitasking or multithreading;
for example, C/370™.
- CICS®. The concurrent main
process is started as a long-running CICS task that accepts connection requests from clients, and
initiates child processes by way of the EXEC CICS START command. CICS sockets include a generic concurrent server
main program called the CICS LISTENER.
- IMS™. The concurrent main
process is started as a BMP that accepts connection requests from
clients and initiates child processes by way of the IMS message switch facilities. The child processes
execute as IMS message processing
programs (MPP). IMS sockets
include a generic concurrent server main program called the IMS LISTENER.
In the iterative and concurrent server scenarios described above,
client and server processes could have exchanged a series of request
and reply sequences before closing the connection.