SSR support
HOOPS Communicator supports two rendering modes: Client and Server. Although our front end has infrastructure for creating SSR enabled viewers via the drop-down menu, our backend application is not setup to handle that case. In this section we will remedy that situation.
If you examine the createNewViewer
method, you will see that we are sending JSON data containing the value of the renderer-type
dropdown to our Spawner
application. In order to create SSR instances we will need to add some code to spawner.js to process this data.
The first step is to add some middleware to our Spawner
class that will parse incoming requests as json objects. Add the following line of code in the Spawner.start
method right before the code that installs the CORS middleware function:
this.expressApp.use(express.json());
Now that our incoming requests are parsed as json, we can check to see if the renderer type is SSR when we go to spawn a viewer. Add the following code to the spawnViewer
method righter after the line that hard codes rendererType
to “csr”:
const requestJson = req.body;
if ("rendererType" in requestJson) {
rendererType = requestJson.rendererType;
}
The final piece of the puzzle is to inform ts3d_sc_server
that it should start in SSR mode. That can be accomplished by using the --ssr
command line option. Add the following code after the args
array is created in the spawnViewer
method:
if (spawnInfo.rendererType == "ssr") {
args.push("--ssr", "true");
}
Finally, for SSR to work on UNIX systems, the DISPLAY environment variable should be set. This generally will have no effect on Windows based systems, so for the purposes of this tutorial we will set it in all cases. Replace the existing call to spawn
with the following code:
const spawnOptions = {env: {"DISPLAY": ":0"}};
let process = spawn(this.executablePath, args, spawnOptions);
At this point. If you restart the server and select “Server” from the renderer type dropdown menu you will notice that the created viewer is running in SSR mode.
In a production environment, it is not recommended to expose communication with the Spawning server directly to users of your webpage. You would most likely want to have a system in the middle that can execute business logic, pull files out of cloud storage, perform authentication, or any other number of tasks before granting a user the ability to provision limited server resources.