I’ve got a Windows application coded in C++. I want to provide a web-based interface to them, with a view to porting them to embedded Linux systems. The web pages are a series of dynamic ‘status pages’ into the system, with possibly some simple interaction controls
Modern HTML/CSS/Web technologies are all comparatively new to me, and I’m trying to work out a sane approach to structure this.
Now, I have ‘static’ pages which use JQuery to retrieve JSON data from my app. The server now is nginx, and it uses FastCGI to pull data from my app.
So the process is a bit like this:
- Browser requests page
- Nginx forwards JSON GET via fastcgi to my app
- My app generates JSON and sends to nginx
- Nginx forwards JSON to browser
This seems a little cumbersome. Is there something smarter I should be doing, maybe using server-side includes with fastcgi to include the JSON data in the original request? Am I doing something horribly unconventional?
If you structure your back-end correctly, you can have it generate both the content and the presentation and send both in HTML form to the browser, without making a mess. This is what presentation templates are for!
Perhaps consider organising your back-end code in some form of the MVC pattern.
You could use FastCGI techniques and libraries.
Then (with FastCGI, or some HTTP server library) you’ll avoid the burden (that old CGI approach has) of starting a new process for every HTTP request.
BTW, some people think that FastCGI is obsolete: they claim that we should always code specialized HTTP server in C++, and perhaps use and configure ngnix (or some other common HTTP server like apache or lighttpd) to redirect some HTTP requests to the specialized web server (so use HTTP protocol in place of FastCGI for the communication between your C++ program and ngnix).
With an HTTP server library, you won’t need some extra HTTP server like ngnix (but your application should be careful to avoid crashing). With FastCGI, your ngnix (or other) Web server can be configured to start or restart your C++ FastCGI application when needed. And FastCGI is somehow designed to interact quickly with the Web server.
Unless the appliance has lots of simultanous HTTP clients (i.e. many people are browsing it at the same time), or unless you don’t trust your C++ application, I would recommend an HTTP server library approach (precisely to avoid the cost of the FastCGI exchanges -which don’t cost much in practice- and more importantly to avoid the need of an extra full blown HTTP server like ngnix…)