James Y Knight ha scritto:

On May 11, 2008, at 6:15 PM, Christopher Stawarz wrote:
Abstract
--------

This specification defines a set of extensions that allow WSGI
applications to run effectively on asynchronous (aka event driven)
servers.

Rationale
---------

The architecture of an asynchronous server requires all I/O
operations, including both interprocess and network communication, to
be non-blocking.  For a WSGI-compliant server, this requirement
extends to all applications run on the server.  However, the WSGI
specification does not provide sufficient facilities for an
application to ensure that its I/O is non-blocking.  Specifically,
there are two issues:

* The methods provided by the input stream (``environ['wsgi.input']``)
 follow the semantics of the corresponding methods of the ``file``
 class.

* WSGI does not provide the application with a mechanism to test
 arbitrary file descriptors (such as those belonging to sockets or
 pipes opened by the application) for I/O readiness.

There are other issues. How do you do a DNS lookup? How do you get process completion notification? Heck, how do you run a process? Once you have I/O readiness information, what do you do with that? I guess you'd need to write a whole new asynchronous server framework on top of AWSGI? I can't see being able to use it "raw" for any real applications.


This is not a problem with AWSGI.
As an example there are libraries like PostgreSQL and curl that can be used with an external event loop.

In the WSGI implementation for Nginx I can provide an interface for using the builtin supporto for asynchronous DNS client.


The first argument, ``fd``, is either an integer representing a file
descriptor or an object with a ``fileno`` method that returns such an
integer.  (In addition, ``fd`` may be ``x-wsgiorg.async.input``, even
if it lacks a ``fileno`` method.)  The second, optional argument,
``timeout``, is either ``None`` or a floating-point value in seconds.
If omitted, it defaults to ``None``.

What if the event-loop of the server doesn't use integer fds, but windows file handles or a java channel object? Where are you allowed to get these integers from? Is it always a socket from socket.socket().fileno()? Or can it be a file from open().fileno() or os.open()? A pipe from os.pipe()? Note that these distinctions are important everywhere but UNIX.


This has the same problems that we have with wsgi.file_wrapper.

This is the reason, among other things, why the API in my implementation uses ngx.connection_wrapper and ngx.poll_register

> [...]




Manlio Perillo
_______________________________________________
Web-SIG mailing list
Web-SIG@python.org
Web SIG: http://www.python.org/sigs/web-sig
Unsubscribe: 
http://mail.python.org/mailman/options/web-sig/archive%40mail-archive.com

Reply via email to