The current TServer implementations expose a single service on a port. If an application has many services many ports have to be opened. This is cumbersome because:
- you have to document which service is available on which port, and remembering the port numbers is difficult
- to prevent the overhead of connection setup on each call, a client has to maintain to many connections: at least one to each port
- it requires opening many ports on a firewall if one is between the client and the server.
By multiplexing multiple services on a single port the problems above are resolved:
- instead of a port number a symbolic name can be assigned to a service
- a client can maintain a small pool of connections to a single port
- only one port has to be opened on the firewall
The attached Java implementation simply wraps a normal CALL message with a (new) SERVICE_SELECTION message. It is not necessary to modify or wrap the response. No changes are needed to the generated classes. Only a new type of server is introduced, and an invocation handler for a dynamic proxy around the Client classes of services is provided for the client side. The implementation does not handle communication errors (invalid data, timeouts, etc.) yet.