[Python-Dev] asyncore fixes in Python 2.6 broke Zope's version of medusa
glyph at divmod.com
glyph at divmod.com
Fri Mar 6 00:11:49 CET 2009
On 07:30 pm, nas at arctrix.com wrote:
>Chris McDonough <chrism at plope.com> wrote:
>>As far as I can tell, asyncore/asynchat is all "undocumented
>>internals". Any use of asyncore in anger will use internals;
>>there never was any well-understood API to these modules.
>The implementation requires some intricate and platform specific
>code which is why it would be nice to be a standard library feature.
>I'm sure that Twisted has the necessary parts but the problem, IMHO,
>is that it does so much more else.
... which is exactly why I have volunteered to explain to someone how to
separate the core event-loop bits (suitable for inclusion in the
standard library) from the huge pile of protocol implementations which
are not necessarily useful.
Despite the FUD to the contrary, Twisted's internal factoring is quite
good; it's not a single, undifferentiated pile of code. Plus, at this
point, we're not even talking about actually putting any Twisted code
into the standard library, just standardizing the "protocol" API, which
basically boils down to:
connectionMade() -> your connection has begun
dataReceived(data) -> you got some bytes, handle them
connectionLost(reason) -> your connection has gone away (with an object
and the inverse, "transport", which is:
write(data) -> deliver some data to the dataReceived on the other end
of this connection (non-blocking, with buffering)
loseConnection() -> goodbye
There are a few other minor details related to how you set these up to
talk to each other and tell when the out-buffer is empty, but it's all
pretty straightforward. The main point is that you don't ever call
recv() or send() and deal with buffering or handling weird errno values.
For example, if your connection goes away, the notification you get is
"your connection went away", not "oops you tried to read some bytes, but
your connection was gone by the time you tried, even though I just told
you it was ready for reading" or other similarly obtuse failure modes.
More information about the Python-Dev