C++ Server Pages
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 building a web shop, where I’m going to sell z-wave devices for home automation. Naturally I started to create it in PHP, but suddenly an old crazy idea took all my attention. I’m going to build it in C++, is this mad or is it the craziest idea someone can come up with? Well, I’m going to give it a try. You can find the source code in the avshop GitHub repository.
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 applications.
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++, aimed at development of
high performance web applications. It uses different web APIs, most notably
FastCGI, boost, as a web layer and various databases as a storage backend. 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 definitely
something I’m going to test and read more about. It feels from what I have read
that it’s (one of) the fastest webservers, 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 nginx, I will need to use something like the FastCGI
protocol. But the FastCGI protocol has barely been updated since 96, and I can’t
decide 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 which enables compilation, loading and execution of
C++ classes and HTML pages with C++ embedded.
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
Commercial system. CppServerPages and LuaServerPages SDK for embedded systems.
http://www.fefe.de/fnord/
Yet another small
httpd; it doesn’t support FastCGI.
http://www.tntnet.org/
Tntnet is a modular,
multithreaded, high performance web application server for C++. To create web
applications 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/
Implement web interface to your programs without using a 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
http://www.ogre3d.org/forums/viewtopic.php?f=16&t=40110