The BOINCBounce server is designed to offload as much of the work of supporting BOINC client machines as possible from the project servers.
The main role performed is to handle the first client attempt to download any data files needed to process a task. This is achieved either by adding the Bounce server to the configured project server's list, or by using full project emulation and rewriting the list of URLs to begin with the Bounce server's download URL.
If the file exists on the Bounce server, it is served with no interaction back to the true project. If the file does not exist on the Bounce server, a connection is made back to the true project to download the file. The file data is then streamed back to the requesting client in realtime (assuming successful download of file from project server), and stored in the Bounce server's cache for future use. If the project server is unavailable at the time of the request and the file does not exist on the bounce server, the project's reply to the request for the file is returned to the client and the client does it's normal failover and exponential backoff with the list of other servers for the file.
Another role that may be used is project emulation. This requires the client machine to indentify the Bounce server as the project URL when the project is added. If project emulation is used, the Bounce server can minimize bandwidth required at the client by removing redundancies in the scheduler replies. At present, scheduler replies are actually slightly longer due to addition of the Bounce server in to the list of URLs for each file identified in a task. Future enhancements are planned to reduce the size of scheduler replies.