At DMBCS we like to do things in certain ways: all our code takes the form of C++17 (or, lately, C++20) libraries built with GNU autotools, providing user interaction through HTTP/HTML5/CSS3/EcmaScript web interfaces. It is thus a common requirement that our code links against a library of classes which implement the HTML paradigm and provide the TCP/IP plumbing to allow applications to easily take the form of self-contained web servers. At DMBCS we use NGINX at top-level to coordinate the set of such micro-servers which make up a complete web site.
The library has been under constant development for over twenty years (yes, really), and in heavy production use. The code-base hasnʼt quite been brought up to our expectations of full production-quality code yet (it has always been a project on the side of other things), and so we still regard it as beta-quality software. We expect this situation to change in the near future.
The following is provided as the simplest code to demonstrate use
of the dmbcs-micro-server library, not to inform of any coding
style or quality system approach. We assume a standard GNU
system with recent
make, bash, gcc, etc.
Start with the HTML file calc.html
<html>
<head><title>Multiplier</title></head>
<body><h1>Multiplier</h1>
<form action="compute" method="GET" id="calc">
<input type="text" name="arg_1"/> x <input type="text" name="arg_2"/>
= <input type="text" name="result" value="[result/]"></input>
<br>
<input type="submit">CALCULATE</input>
</form>
</body>
</html>
And the C++ source file calc.cc
#include <dmbcs-micro-server.h>
using namespace DMBCS::Micro_Server;
/* This function both serves up the basic HTML page, and
* performs the multiplication and injects the result into the
* HTML. */
void home_page (Query_String const &query, int const socket)
{
Hyper_Tags tags;
tags.add ("result",
query.get ("arg_1", 0) * query.get ("arg_2", 0));
Http_Server::return_html (socket,
substitute (tags,
slurp_file ("calc.html")));
}
int main ()
{
auto server = Http_Server {2022,
{ {"", home_page},
{"compute", home_page} }};
for (;;) tick (server, 1000000);
return 0;
}
then the makefile
CXXFLAGS = `pkg-config --cflags dmbcs-micro-server` LDFLAGS = `pkg-config --libs dmbcs-micro-server`
Then at the command line type
make calc
./calc
then point a browser at http://localhost:2022/ and use the
simple calculator (donʼt try to do anything funny: the code has been kept
deliberately simple and doesnʼt do any error checking). Note that an
answer can be obtained directly with a URL like
http://localhost:2022/compute?arg_1=3&arg_2=4.
The dmbcs-micro-server source code is managed with GIT (configured with autotools, built with make and a good C++23 compiler). Type
at the command line to obtain a copy.
If you use Guix for your package management, you can mention our channel in your $HOME/.config/guix/channels.scm, and then (after guix pull)
The documentation, as yet incomplete, comes with the source, and you can also read it here.
Please click here if you wish to send us a message.
If you would like to receive e-mail notices of matters arising about this library, you may request this through the contact form.
We will happily consider contributions to the source code if you provide the address of a GIT repository we can pull from, and will consider all bug reports and feature requests, although onward development of this library is not a primary concern of ours.
Like all free (as in free beer) FOSS
software, the amount of time that can be devoted to this
project is limited by the needs of the developers to
otherwise earn a living wage. Contributions to the
project will make a difference to the amount of
resource available to it. If possible, please contribute by
Bitcoin to the address
1PWHez4zT2xt6PoyuAwKPJsgRznAKwTtF9, or Ethereum to
0xd306277ef68026a64bdd8c99ac7f19f21b3da6fb. For
other forms of donation please message us at the contact form at
https://khleedril.org/dmbcs/contact.
If you want paid support, or want to pay for specific features to
be developed, DMBCS will most likely be happy to oblige!
Thank you.
This web page Copyright © 2025 DM Bespoke Computer Solutions
This page was last modified December, 2023
This page is https://khleedril.org/dmbcs/micro-server.