<!--toc--> |
|
|
# CppCMS 1.1.0 - Next Release |
|
## Implementing UDP Support for `booster::aio::socket` |
|
Booster.Aio socket supports stream sockets well, but |
has very poor (if any) support of data-gram sockets. |
|
You can open them and use them but there are no operations |
like `sendto` or `recvfrom` that are data-gram oriented. |
|
Add their implementations to Booster analogously to |
implementations of async/sync read/write operations. |
|
## Add Support of multiple event loops |
|
Today, asynchronous applications do not scale |
well on multi-core systems. |
|
Add required support of multiple event loops |
so different asynchronous applications would |
be able to use them. |
|
|
## Implement Virtual Hosts support |
|
Required for embedded environments. |
|
## Provide Plugin Framework |
|
Allow applications and other tools to 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::bind` in Booster. |
- Extract/Reimplement `boost::unordered` in Booster. |
|
Try to get rid of cppcms\_boost? |
|
## Cache Improvements |
|
### Contention |
|
When an entry is invalidated many requests |
may try to generate it and create significant load. |
|
Solution, delay "fetch" if some other fetching. |
|
### Active 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. |
|
|
### Object invalidation |
|
Use cache to invalidate general object |
|
## Improve Support of RESTful services |
|
Provide friendly API for RESTful applications in similar |
way it is done today for JSON-RPC |
|
## Improve file serving performance |
|
Make symlinks checks optional, try to use asynchronous I/O. |
|
# CppCMS 1.3.0 and later |
|
## Implement SSL socket for `booster::aio` |
|
Implementation of SSL sockets. |
|
## 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. |
|
## Replace LRU with 2Q scan resistant algorithm |
|
Check possibility of changing this. |
|
|
## Provide WebSockets support |
|
Implement Web Sockets support and transparent |
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. |
|
|
## Implement HTTPS support |
|
Embedded web server should support HTTPS to make |
it even more usable for embedded enviroments |
<!--toc-->
|
|
|
# CppCMS 1.1.0 - Next Release
|
|
## Implementing UDP Support for `booster::aio::socket`
|
|
Booster.Aio socket supports stream sockets well, but
|
has very poor (if any) support of data-gram sockets.
|
|
You can open them and use them but there are no operations
|
like `sendto` or `recvfrom` that are data-gram oriented.
|
|
Add their implementations to Booster analogously to
|
implementations of async/sync read/write operations.
|
|
## Add Support of multiple event loops
|
|
Today, asynchronous applications do not scale
|
well on multi-core systems.
|
|
Add required support of multiple event loops
|
so different asynchronous applications would
|
be able to use them.
|
|
|
## Implement Virtual Hosts support
|
|
Required for embedded environments.
|
|
## Provide Plugin Framework
|
|
Allow applications and other tools to 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::bind` in Booster.
|
- Extract/Reimplement `boost::unordered` in Booster.
|
|
Try to get rid of cppcms\_boost?
|
|
## Cache Improvements
|
|
### Contention
|
|
When an entry is invalidated many requests
|
may try to generate it and create significant load.
|
|
Solution, delay "fetch" if some other fetching.
|
|
### Active 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.
|
|
|
### Object invalidation
|
|
Use cache to invalidate general object
|
|
## Improve Support of RESTful services
|
|
Provide friendly API for RESTful applications in similar
|
way it is done today for JSON-RPC
|
|
## Improve file serving performance
|
|
Make symlinks checks optional, try to use asynchronous I/O.
|
|
# CppCMS 1.3.0 and later
|
|
## Implement SSL socket for `booster::aio`
|
|
Implementation of SSL sockets.
|
|
## 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.
|
|
## Replace LRU with 2Q scan resistant algorithm
|
|
Check possibility of changing this.
|
|
|
## Provide WebSockets support
|
|
Implement Web Sockets support and transparent
|
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.
|
|
|
## Implement HTTPS support
|
|
Embedded web server should support HTTPS to make
|
it even more usable for embedded enviroments
|
|