micro-server/README.md

142 lines
4.4 KiB
Markdown
Raw Permalink Normal View History

2025-10-26 22:26:14 +00:00
> Note that the primary hosting site for this package is
> https://khleedril.org/forge/dmbcs/micro-server.
2020-03-24 12:17:31 +00:00
# DMBCS Imbedded HTTP Server Library for C++
At DMBCS we like to do things in certain ways: all our code takes the form
2025-10-26 22:26:14 +00:00
of C++17 (or, lately, C++23) libraries built with cmake, providing
2020-03-24 12:17:31 +00:00
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.
2025-10-26 22:26:14 +00:00
The library has been under constant development for over twenty-five years
2020-03-24 12:17:31 +00:00
(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
2025-10-26 22:26:14 +00:00
still regard it as beta-quality software.
2020-03-26 12:28:11 +00:00
## Simplest example
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
<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" id="result" value="[result/]"></input>
<br>
<input type="submit">CALCULATE</input>
</form>
</body>
</html>
```
And the C++ source file `calc.cc`
```c++
#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`.
2020-03-24 12:17:31 +00:00
## Download
The *dmbcs-micro-server* source code is managed with *GIT* (configured
2025-10-26 22:26:14 +00:00
with *cmake*, built with *make* and a good C++23 compiler). Type
2020-03-24 12:17:31 +00:00
2025-10-26 22:26:14 +00:00
git clone http://khleedril.org/forge/dmbcs/micro-server dmbcs-micro-server
2020-03-24 12:17:31 +00:00
at the command line to obtain a copy.
## Documentation
The documentation, as yet incomplete, comes with the source, and you can
2025-10-26 22:26:14 +00:00
also read it [https://khleedril.org/dmbcs/micro-server/documentation](here).
2020-03-24 12:17:31 +00:00
## Contact
2025-10-26 22:26:14 +00:00
Please click [https://khleedril.org/dmbcs/contact](here) if you wish to send us
2020-03-24 12:17:31 +00:00
a message.
2025-10-26 22:26:14 +00:00
2020-03-24 12:17:31 +00:00
### Mailing list
If you would like to receive e-mail notices of matters arising about this
library, you may request this through the contact form.
## Contribution to development
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.
## Donations
If you use this application please consider a bitcoin donation if you
can. A small amount informs us that there is interest and that we are
providing a useful service to the community; it will keep us motivated to
continue to make open source software. Donations can be made by bitcoin to
the address 1PWHez4zT2xt6PoyuAwKPJsgRznAKwTtF9, or by Ethereum to
0xd306277ef68026a64bdd8c99ac7f19f21b3da6fb.