On Wed, Jul 14, 2010 at 02:31:46AM -0000, [email protected] wrote:
> I'll answer whatever questions I can. :)

Oh, I have some questions...
I asked some questions in the form of suggestions, well, don't take them 
seriously,
I only ask, not really propose anything. However I'm ready to hear you
about what I'm wrong with.

Here, what I have discovered so far:
There are transport factories in twisted, not defined as such, but really they 
are,
like tcp.Port and tcp.Connector.

They interface with protocol factories. That interface is asymmetric between
server protocol factory and client protocol factory. Well, the implementation
of client's side protocol factory and server's side should differ, but why 
should interfaces?
That is okay, while you only have different and asymmetric transport factories
the ones for client transports and the others for server transports.
But is there really something in created and connected transport,
that makes it server's or client's ? I guess nothing, except protocol instance 
attached.

Q: Why should protocol factory interface "bother" about client/server dichotomy?
For example, why should I be limited to only using PBClientFactory with 
connectXXX()
variants of transport factories?
Why should I do not want (under some crazy circumstances) to use 
reverse-connects
and run PBServerFactory with connectXXX()?
Well, maybe not PB, but what about other protocols?
Should it work? Well, I suppose, it would break if you try now, but is
is supposed to be that asymmetric?

And after all, there is absolute symmetry in UDP-based transports.

Q: Consider socketpair() variant - a pair of completely symmetric mutually
connected sockets.
Should I provide transport factory for use with server protocol factories
and another transport factory for use with client protocol factories?

That idea sounds stupid to me, there can be no difference in the implementation,
except in the interfaces to protocol factories.

I see there are some code, that can be moved from tcp.Port and tcp.Connector
to some common base class of an abstract transport factory. That class could
interfere with protocol factory without knowing whether it is server or client.
Protocol factory already knows about it's own asymmetry.

I do identify the events, that protocol factory receives from transport factory 
as these,
please correct me if I'm wrong:

global (factory-context) events:
- start factory                         doStart
- entering transport creation phase     startedConnecting       <server: when 
bind&listen succeeds why does anybody
                                                                 not invoke 
something like startedListenig ?>
- stop factory                          doStop

per transport connection events:
- on transport creation                 <none exists?why?>      <after 
connect() or listen() returns result, at this point
                                                                 we may decide 
to prevent further transport instantiation,
                                                                 especially if 
we are server-side protocol factory>
- transport creation failed             clientConnectionFailed  <server: direct 
analogy - accept() may return an error,
                                                                 but that event 
not exists for server. why?>
- transport created succesfully         buildProtocol           <a request to 
build a protocol instance implies, that
                                                                 transport 
instance have been succesfully created. or not?>
- build protocol                        buildProtocol           
- after transport and protocol creation clientConnectionMade    <in 
t.s.pb.PBXXXXFactory, event sent by protocol instance,
                                                                 name not 
defined in any Interface, why not?>
- transport closed                      clientConnectionLost    <why not define 
this for server too to be consistent?>

They are not client/servers asymmetric as I see them, but have asymmetric names 
in twisted
and sometimes when server variants exists, they have no fixed names defined in 
Interface classes :(

What is the difference between doStart and startedConnecting (together with 
imaginary startedListening)?

And who is responsible for sending which events? That is not defined in 
documentation.

What do you think about these names:
doStart()
transportFactoryStarted()
onBeforeTransportCreate()
connectionFailed()
buildProtocol()
connectionMade()
connectionLost()
doStop()
Well, I understand, you will veto them arguing by lot of code using old names,
but I am interested to know will they break the abstraction of protocol factory?

Can please anyone explain the asymmetry of the interfaces of protocol factories
and tell how can it be useful for me.

Thanks for your time.

Alexey.

-- 
с уважением,
Алексей Шпагин
системный администратор
цеха передачи данных
технического центра телекоммуникаций
ОАО "ВолгаТелеком" 
филиал в Удмуртской республике.

_______________________________________________
Twisted-Python mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to