Proxy endpoints allow RCF clients to connect to RCF servers that they are otherwise unable to connect directly to.
There are a number of situations in which a client may be unable to establish a direct network connection to a server it intends to call.
Proxy endpoints provide a workaround for these situations, allowing one RCF server (the proxy server) to serve as a proxy for another RCF server (the destination server). The proxy server maintains a pool of connections from the destination server, and uses these connections to allow clients to connect through to the destination server.
The proxy server accepts connections from a destination server, and keeps these connections in a connection pool. The connections are then subsequently used for clients wanting to connect to that particular destination server.
Each destination server must present a name to the proxy server. The destination server name is arbitrary and chosen by your application. The clients will use the destination server name to specify which server they want to connect to.
To set up a proxy server, you configure a
RCF::RcfServer as usual, and then call
RCF::RcfServer::setEnableProxyEndpoints(). Once started, the
RcfServer will begin registering destination servers and proxying connections from clients to those destination servers.
At any time, you can query the proxy server, for the names of the proxy endpoints that are currently available:
RcfServer is configured with a
RCF::ProxyEndpoint parameter, specifying the network address of the proxy server, and the name the destination server will be exposed as.
Once started, the destination
RcfServer will begin initiating network connections to the proxy server. These connections will subsequently be used by clients to make remote calls back to the destination server.
Once the destination server and proxy server are up and running, a client can connect to the destination server by using a
RCF::ProxyEndpoint and specifying the proxy server along with the name of the destination server.
Using a proxied connection, the client can make remote calls as usual, and is able to disconnect and re-connect, just as with an un-proxied connection. Distinct RCF clients will have distinct network connections to the destination server, and the lifetime of any session objects created on the destination server, will be mapped to the lifetime of the clients proxied network connection.
It's quite common to have a situation where clients connect to a server, but subsequently the server needs to be able to make remote calls in the opposite direction, back to the clients. We refer to this as two-way communication.
Beginning with RCF 3.0, two-way communication is supported using proxy endpoints. For example, assume we have a server process and a client process, and we want to implement two-way communication between them. In the server process, you would enable proxy endpoint support on the
Any server-side code that needs to make a call to the client process, would do so by using a proxy endpoint:
In the client process, you need to start a
RcfServer, configured with the relevant proxy endpoint, in order to receive calls from the server process: