C++ Server Pages
28 Feb 2011

For the last decade I have been a php developer, but I have always seen myself as a c++ developer. Even though I have only written one small c++ application in my work life, and some unfinished test applications. So now I feel it’s time to do a new try, to see if I’m a c++ developer, php developer or something else.

Currently I’m buildin a web shop, where I’m going to sell z-wave devcies for home automation. Naturally I started to create it in PHP, but suddenly an old cracy idé took all my attation. I’m going to build it in c++, is this mad or is it the craziest idé someone can come up with? Well, I’m going to give it a try.

First step will be to scan the Internet for a c++ web application system. I’d like something that is opensource, used by others, works both for large websites and embedded systems. So here comes a list of different systems, and some first impression comments.

Libraries

http://www.webtoolkit.eu/wt
Wt is a C++ library for developing interactive web applications. The API is widget-centric and inspired by desktop GUI APIs. To the developer, it offers complete abstraction of any web-specific implementation details, including event handling, graphics support, and pretty URLs.

http://pocoproject.org
http://pocoproject.org/docs/ApacheConnectorUserGuide.html
http://pocoproject.org/docs/PageCompilerUserGuide.html
The POCO C++ Libraries (POCO stands for POrtable COmponents) are open source C++ class libraries that simplify and accelerate the development of network-centric, portable applications in C++. The libraries integrate perfectly with the C++ Standard Library and fill many of the functional gaps left open by it. Their modular and efficient design and implementation makes the POCO C++ Libraries extremely well suited for embedded development, an area where the C++ programming language is becoming increasingly popular, due to its suitability for both low-level (device I/O, interrupt handlers, etc.) and high-level object-oriented development. Of course, the POCO C++ Libraries are also ready for enterprise-level challenges.

http://pocoproject.org/docs/00100-GuidedTour.html#4
An article describing how to create your own webserver with poco.

http://www.boost.org/
A free (Boost license) portable C++ source library. Not a web server library, but looks very useful for creating the appliations.

http://www.pion.org/projects/pion-network-library
Pion Network Library (pion-net) is a C++ development library for embedding a lightweight HTTP interfaces to your application. Uses the boost lib.

http://code.google.com/p/mongoose/
Mongoose is an easy to use web server. It can be embedded (40k footprint) into existing application to provide a web interface to it.

http://www.gnu.org/software/cgicc/
A C++ class library for writing CGI/FastCGI applications. Looks ok.

http://cppcms.sourceforge.net/wikipp/en/page/main
CppCMS is the web development framework written in C++, that is aimed on development of high performance web application. It uses different web APIs, most noticably FastCGI, boost, as a web layer and various databases as a storage backed. Only 383 downloads, so not that many users.

http://luci.freifunk-halle.net/
LuCI is a collection of free Lua software for embedded devices. It includes several useful tools and libraries for developers as well as an MVC-Webframework and web user interface which is part of OpenWrt Kamikaze starting from release 8.09.

Web application server.

http://wiki.nginx.org/NginxHttpFcgiModule
lighttpd_vs_nginx
benching-lighttpd-vs-nginx-static-files
lighttz-a-simple-and-fast-web-server
I get the feeling that nginx is the HTTP server to use. It’s defenitley something I’m goin to test and read more about. It feels from what I have read that it’s (one of) the fastest webserver, stable and easy to config. It’s possible to install on embedded computers (nginx-on-sheevaplug) something I might like to do in a future project.

http://www.fastcgi.com/drupal/
To make c++ dynamic pages on the nginx, I will need to use somthing like the fastcgi protocol. But the fastcgi protocol has barley been updated since 96, and I can’t decided if it’s a good or bad thing. Is it stable and good technology or old and bad?

http://blackmilk.fr/www/cms/dev/libapache2_mod_raii_en
This is a module for apache2 whiche enables compilation, loading and execution of C++ classes and HTML pages with c++ embeded.

http://www.lighttpd.net/
Regarding to some web-articles, lighttpd has plenty of memory leaks and other bugs. “Security, speed, compliance, and flexibility — all of these describe lighttpd (pron. lighty) which is rapidly redefining efficiency of a webserver; as it is designed and optimized for high performance environments. With a small memory footprint compared to other web-servers, effective management of the cpu-load, and advanced feature set (FastCGI, SCGI, Auth, Output-Compression, URL-Rewriting and many more) lighttpd is the perfect solution for every server that is suffering load problems. And best of all it’s Open Source licensed under the revised BSD license. lighttpd powers several popular Web 2.0 sites like YouTube, wikipedia and meebo.”

http://barracudaserver.com/online-demos.html
Commersial system. CppServerPages and LuaServerPages SDK for embedded systems.

http://www.fefe.de/fnord/
Yet another small httpd, don’t support fastcgi.

http://www.tntnet.org/
Tntnet is a modular, multithreaded, high performance webapplicationserver for C++. To create webapplications Tntnet has a template-language called ecpp similar to php, jsp or mason, where you can embed c++-code inside a html-page to generate active content. The ecpp-files are precompiled to c++-classes called components and compiled and linked into a shared library. This process is done at compiletime.

http://www.appwebserver.org/
Appweb is an embedded web server for the efficient hosting of web applications and frameworks. It is blazing fast and has an extensive set of features. Appweb is optimized for hosting dynamic web applications via an event-driven, multi-threaded core to deliver rapid response, fast throughput and effective memory utilization. It is compact and will embed using as little as 800K of memory.

WEB Services

http://ws.apache.org/axis/cpp
C++ web service engine for soap communication. Not active anymore and replaced by axis2.

http://ws.apache.org/axis2/c/
C web service engine for soap communication. But possible to write c++ modules.

http://wso2.com/products/create/wso2-web-services-application-server-wsas/
http://wso2.org/projects/wsf/cpp
Commercial version of Axis2.

http://www.cs.fsu.edu/~engelen/soap.html
Opensource c/c++ web service engine for soap communication. “The toolkit has been used by many organizations, including Fortune 100 companies. Applications include embedded systems, mobile devices, telecommunications, routers, online games, Web TV, banking systems, auction systems, news outlets, network management systems, grid and cloud computing platforms, and security software. ”

http://code.google.com/p/staff/
“Staff is Web Service Framework for C++/JavaScript based on Apache Axis2/C.” It doesn’t have that many downloads, if looking on the download page, which probably means that it is not used.

http://libwebserver.sourceforge.net/
Implent web interface to your programs without using an web server. 2002-2004.

http://www.appinf.com/en/products/remoting.html
Commercial open source, Applied Informatics Remoting is a distributed objects and web services framework for C++. With Remoting, building distributed applications, implementing high-level inter-process communication (IPC) or web services based on the Simple Object Access Protocol (SOAP) and the Web Service Definition Language (WSDL) becomes a breeze. Making C++ objects available remotely over the network or turning them into a web service is as easy as adding a few annotations to a header file. The Remoting code generator does the rest. There is no need to maintain a separate interface definition, using an awkward interface definition language.

http://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers
http://en.wikipedia.org/wiki/Comparison_of_web_servers
List of webservers

Discussions and articles.

Forum discussions and articles, that might be useful to read.

why-isnt-c-used-in-web-developement
c-opengl-application-as-a-web-service
giving-c-application-a-http-web-server-functionality
web-application-frameworks-c-vs-python
how-to-keep-a-c-realtime-server-application-with-a-modern-web-client-interface
c-c-web-server-library
open-source-minimal-web-server
c-c-any-good-web-server-library
which-embedded-web-server-to-use-for-my-app-gui
open-source-c-c-embedded-web-server
c-web-service-framework
what-works-for-web-dev-in-c
c-and-web-development
staff-web-service-framework
c++ web server page
which-is-the-best-c-web-framework
what-works-for-web-dev-in-c
http://www.ogre3d.org/forums/viewtopic.php?f=16&t=40110