CppCMS 1.x.x tasks
- CppCMS 1.1.0 - Next Release
- CppCMS 1.3.0 and later
- Booster.Filesystem
- Implement Locale sensitive Date-Time Form Widgets
- Implement Active Cache invalidation
- Replace LRU with 2Q scan resistant algorithm
- Improve Support of RESTful services
- Provide WebSockets support
- Degraded Mode of work
- Implement Connection Forwarding over unix-sockets
- Add Support of multiple event loops
CppCMS 1.1.0 - Next Release
Implementing UDP Support for booster::aio::socket
Booster.Aio socket supports well stream sockets but has very poor (if any) support of data-gram sockets.
You can open them, use them but there is no such operations
like sendto or recvfrom that are data-gram oriented.
Add their implementation to Booster in analogy to implementations of async/sync read/write operations.
Implement SSL socket for booster::aio
Implementation of SSL socked need for next requirement
Web Server
Implement HTTPS support
Embedded web server should support HTTPS to make it even more usable for embedded enviroments
Implement Vistual Hosts support
Required for embedded environments
Provide Plugin Framework
Allow applications and other tools be loaded dynamically.
Implement Pre-Upload file validation, Upload file meter support
In CppCMS application is created only once the request is fully ready. And after that use can validate the uploaded files.
This is quite bad in case of big ones.
Possible solution is store the validation requirements
in the session and let cppcms::impl::cgi_api
fetch this session data and use rules to validate
uploaded files.
Problems:
- Session fetch may be not so cheap, it may be done over network or require DB access.
- Session API allows only synchronous requests.
- File uploading is done in even loop where all operations should be non-blocking.
Possible solutions:
- Store this data in signed cookies.
- Add asynchronous api to sessions.
- Send session fetch to thread pool till and get session data this way.
Boost to Booster tasks
- Extract/Reimplement
boost::bindin Booster. - Extract/Reimplement
boost::iostreamsin Booster and replacecppcms_boost's zlib filter with Booster's one. - Extract/Reimplement
boost::unorderedin Booster.
Try to get rid of cppcms_boost?
CppCMS 1.3.0 and later
Booster.Filesystem
Implement Directory Iterator.
Implement Locale sensitive Date-Time Form Widgets
ICU provides good features for parsing and formatting dates and times, implement Date-Time Widget for this purpose.
It is not so-straightforward as user should know the format he/she enters the data, such information is not supplied by any existing widgets.
Think what to do in case of no-icu builds.
Implement Active Cache invalidation
Distributed Cache system implements L1/L2 cache allowing a cache client to check if the data is has is still up-to-date without reading it back.
However each access to cache still require TCP-ping-pong.
So instead active cache invalidation may be done: when trigger is risen or new data is stored a sort of a message that causes all clients to drop invalid cache is broad-casted.
Need to be implemented.
Replace LRU with 2Q scan resistant algorithm
Check possibility of changing this.
Improve Support of RESTful services
Provide friendly API for RESTful applications in similar way it is done today for JSON-RPC
Provide WebSockets support
Implement Web Sockets support and transparetn fallback to some long-polling based protocol comet
Degraded Mode of work
Problem:
What happens when one of cache/session servers fails?
Solution:
Provide automatic servers fail-detection procedures and continue to work in degraded mode.
Implement Connection Forwarding over unix-sockets
CppCMS forwarding framework allows to forward any connection to other network node over SCGI API.
Is is very useful to be able to forward connections between forked processes of same application.
It can be done in much cheaper between forked processes by forwarding a file descriptor over Unix domain socket and passing already read information via shared memory.
Add Support of multiple event loops
Today, asynchronous applications do not scale well on multiple CPU systems.
Required add support of multiple event loops so different asynchronous applications would be able to use them.
