$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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