Node server GUI frontend

Well, we all know about headless servers. Actually, probably the vast majority of servers out there are headless.

As usual (it seems), my situation asked for quite something else. Basically, the proposed architecture looks more or less like:

RTG SA

The app server (node.js) is situated on a physical machine physically connected to two screens.

Between this machine and the 'net there are all sorts of regular networking layers. Please keep in mind that one of the main reasons for this setup is physical portability: ie, the client gets the necessary hardware as the product. The server itself relies on CDN for static files etc.

Each monitor/screen needs to show something different, produced by the same node server.

For now this server will probably run on Windows, but given a concept (which is what my question is after), I can change the code to run on the target platform. Well, depending on my code, this could even be done automatically.

So, my actual question. Node is quite flexible in that it can be run by anything - even custom made software (C++, Delphi, even GM). Just shell_exec('node server.js') and we're off.

But the screens themselves need to be quite dynamic. So node needs to influence both screens in some way. A few options I'm considering:

  • A custom app which creates two resizable, featureless windows with an embedded chromium browser to be controlled by the node server somehow (how node react with these browsers?)
  • A custom app which, according to node CLI output, updates the two screens' UI. Since I need something flashy as the UI, this app would be created in something like GameMaker, or a similar engine.

PS: Just in case you're asking; the physical connection opposed to a network one (eg; web-based GUI frontend) is by design.

I'd just wire up the result/monitoring screens as regular HTML pages. In your Node app, create a second HTTP server (on a non-standard port, firewalled from the public) that serves up the monitoring page.

Use socket.io to to send the realtime data to the monitoring page, which can make everything look pretty. Fire it up in a full-screen instance of Chrome.

This approach completely frees you from any kind of platform dependency, and decouples the monitoring app from the server app. It leaves you the latitude to run the monitoring app on a separate box if necessary.