Boost logo

Boost :

Subject: [boost] [Beast] Questions Before Review
From: Artyom Beilis (artyom.beilis_at_[hidden])
Date: 2017-06-25 21:02:13


Hello Vinnie Falco,

I have several design questions regarding this library before the review.

DISCLIMER:

My name is Artyom Beilis.
I'm the author of CppCMS C++ Web Framework: http://cppcms.com
It may seems like it can be in some competition with
Beast but I don't see it this way as Beast is too low level library that
does not addresses typical problems of developers needing Web API/Site
running using C++.

CppCMS addresses totally different problems in different way.

So there are my design related questions:

Header Only Design
---------------------------

As somebody who worked with guys who do web development, it was very
clear that compilation time is an issue.

A simple build of http_server_small.cpp example requires about 6s(!)
of compilation time g++ 5.4
http_server_fast.cpp takes 7s

In comparison entire message board containing templates code flow SQL and more
leads to only 4s - non paralel build.
(https://github.com/artyom-beilis/cppcms/tree/master/examples/message_board
)

I understand that you work on base of Boost.Asio - which itself has
unacceptable compilation times but having for web
application development may be serious deal breaker for big projects.

Which Leads me to another design Choice

Template Meta-programming Based Design instead of classic Object Oriented Design
----------------------------------------------------------------------------------------------------------------
I see that almost every object there is some kind of template object.

It almost mimics the API of Boost.Asio which on its way has its limitations.
I remember I needed to implement FastCGI over TCP and Unix domain sockets
virtually leading to same code besides some initial bind - and it required to
create the entire parser using template programming because the socket itself
was template object different for UNIX and TCP.

I have strong feeling that lots of stuff can actually be done using classic OOP.

Example Question:

> Can I implement same server code for both SSL and non SSL HTTP protocol
> without use of templates in the class itself?

And my current final question

Who are the potential users of the library?
-------------------------------------------------------

If I need to send a simple http request to server it does not seem
to do simple enough job (see your FAQ) so I'll probably be better
with feature rich libcurl.

If I need to implement complex web server/service I don't have
cookies, sessions, forms, html?

If I need to implement RESTful API do I have all stuff like URL mapping of
different paths to callbacks, protocol abstraction http/https
(basic stuff - I don't see it there correct me if I wrong)

Is it for web server developers? Maybe I'd be happier with simple
HTTP protocol parser that I can integrate to any socket API?

Can you please give more accurate description of who is this
library intended for?

Best Regards,
  Artyom Beilis


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk