[DOC] Added section `Process model` to talk a bit about the recently merged longpolling feature.
bzr revid: vmt@openerp.com-20130219110027-8kld9li7i5g0dtjo
This commit is contained in:
parent
b3e9037dd9
commit
331ccca310
|
@ -1,6 +1,6 @@
|
||||||
========================================
|
============
|
||||||
Architecture
|
Architecture
|
||||||
========================================
|
============
|
||||||
|
|
||||||
OpenERP as a multitenant three-tiers architecture
|
OpenERP as a multitenant three-tiers architecture
|
||||||
=================================================
|
=================================================
|
||||||
|
@ -180,6 +180,7 @@ OpenERP follows the MVC semantic with
|
||||||
|
|
||||||
Network communications and WSGI
|
Network communications and WSGI
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
OpenERP is an HTTP web server and may also be deployed as an WSGI-compliant
|
OpenERP is an HTTP web server and may also be deployed as an WSGI-compliant
|
||||||
application.
|
application.
|
||||||
|
|
||||||
|
@ -207,3 +208,45 @@ As such, it can be run as a stand-alone HTTP server or embedded inside OpenERP.
|
||||||
The HTTP namespaces /openerp/ /object/ /common/ are reserved for the XML-RPC
|
The HTTP namespaces /openerp/ /object/ /common/ are reserved for the XML-RPC
|
||||||
layer, every module restrict it's HTTP namespace to /<name_of_the_module>/
|
layer, every module restrict it's HTTP namespace to /<name_of_the_module>/
|
||||||
|
|
||||||
|
Process model
|
||||||
|
=============
|
||||||
|
|
||||||
|
In the past, the OpenERP server was using threads to handle HTTP requests
|
||||||
|
concurrently or to process cron jobs. Using threads is still the default
|
||||||
|
behavior when running the ``openerp-server`` script but not the recommended
|
||||||
|
one: it is in fact recommended to use the ``--workers`` option.
|
||||||
|
|
||||||
|
By using the ``--workers`` option, the OpenERP server will spawn a fixed number
|
||||||
|
of processes instead of spawning a new thread for each incoming request.
|
||||||
|
|
||||||
|
This has a number of advantages:
|
||||||
|
|
||||||
|
- Processes do not suffer from CPython's Global Interpreter Lock.
|
||||||
|
- Processes can be gracefully recycled while requests are still handled by the
|
||||||
|
server.
|
||||||
|
- Resources such as CPU time and memory made available to a process can be
|
||||||
|
monitored on a per-process basis.
|
||||||
|
|
||||||
|
When using the ``--workers`` options, two types of processes may be spawned:
|
||||||
|
web process, and cron process.
|
||||||
|
|
||||||
|
.. versionadded:: 7.1
|
||||||
|
|
||||||
|
.. _longpolling-worker:
|
||||||
|
|
||||||
|
When using the ``--workers`` options, three types of processes may be spawned:
|
||||||
|
web process, and cron process, just as previsouly, but also an evented (using
|
||||||
|
gevent) web process is started. It is used for long-polling as needed by the
|
||||||
|
upcoming Instant Messaging feature. As for now, that process is listening on a
|
||||||
|
different port than the main web processes. A reverse proxy (e.g. Nginx) to
|
||||||
|
listen on a unique port, mapping all requests to the normal port, but mapping
|
||||||
|
the ``/longpolling`` route to the evented process is necessary (the web
|
||||||
|
interface cannot issue requests to different ports).
|
||||||
|
|
||||||
|
(It is possible to make the threaded server evented by passing the ``--gevent``
|
||||||
|
flag.)
|
||||||
|
|
||||||
|
The goal is to drop support for the threaded model, and also make all web
|
||||||
|
processes evented; there would be no more distinction between "normal" and
|
||||||
|
"longpolling" processes. For this to happen, further testing is needed.
|
||||||
|
|
||||||
|
|
|
@ -6,13 +6,14 @@ Changelog
|
||||||
`trunk`
|
`trunk`
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Added the :ref:`Long polling <longpolling-worker>` worker type.
|
||||||
- Added :ref:`orm-workflows` to the ORM.
|
- Added :ref:`orm-workflows` to the ORM.
|
||||||
- Added :ref:`routing-decorators` to the RPC and WSGI stack.
|
- Added :ref:`routing-decorators` to the RPC and WSGI stack.
|
||||||
- Removed support for `__terp__.py` descriptor files.
|
- Removed support for ``__terp__.py`` descriptor files.
|
||||||
- Removed support for `<terp>` root element in XML files.
|
- Removed support for ``<terp>`` root element in XML files.
|
||||||
- Removed support for the non-openerp namespace (e.g. importing `tools` instead
|
- Removed support for the non-openerp namespace (e.g. importing ``tools``
|
||||||
of `openerp.tools` in an addons).
|
instead of ``openerp.tools`` in an addons).
|
||||||
- Add a new type of exception that allows redirections:
|
- Add a new type of exception that allows redirections:
|
||||||
openerp.exceptions.RedirectWarning.
|
``openerp.exceptions.RedirectWarning``.
|
||||||
- Give a pair of new methods to res.config.settings and a helper to make them
|
- Give a pair of new methods to ``res.config.settings`` and a helper to make
|
||||||
easier to use: get_config_warning()
|
them easier to use: ``get_config_warning()``.
|
||||||
|
|
Loading…
Reference in New Issue