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