> >Would you mind giving a tip on how to make use of a CustomPort deriving
> >of Port? How to "plug" that into Twisted?
> 
> I have two suggestions, one of which I hope you'll like and the other of which
> you might not. :)

Awesome! This is enough hints to get me started.

I already have Twisted endpoint plugins, and I will follow that road, something 
like

tcpwithopts:tcp:9000:interface=0.0.0.0:reuse-port:true:disable-nagle:true

Subclassing Port / adoptStream: I see;) Not sure if this SO_REUSEPORT works
on Windows - if it does, another aspect then is that adoptStream is Unix-only ..

I will see. Thanks again!

/Tobias


> 
> First, endpoints are the intended extension point for this sort of thing now. 
>  You
> can write a plugin for the parser so that `serverFromString` will give out 
> server
> endpoints for your port type (giving an appropriate string description).
> Applications won't be able to tell what's going on because the server endpoint
> interface is just `.listen(factory)ยด.
> 
> Second, please don't subclass `Port`.  It's true there are no underscores
> anywhere in its name (`twisted.internet.tcp.Port`) making it part of Twisted's
> public API.  Nevertheless, it's very much a reactor implementation detail.  
> It's a
> mistake that it's public.  To compounded this, the exactly interface between a
> class and its subclasses is hazy and gross at best.  I'd discourage you (and
> everyone else) from subclassing *most* things in Twisted these days (lots of
> our APIs are still subclassing-oriented so it's not always possible to avoid, 
> of
> course).
> 
> In this case, I think you might actually be able to re-use all of the 
> important
> parts of `Port` without subclassing it.  You can create a bare-bones
> implementation of `IListeningPort` that creates a socket and sets the flags 
> you
> want on it.  Then, use `reactor.adoptStreamPort` to get the reactor to create
> and initialize a new `Port` with your socket.
> This leaves you with a little code to duplicate (basically
> `createInternetSocket`) but a pretty small amount - and the upside is that
> you're totally isolated from the internals of `Port`, from the 
> accidentally-public
> implementation details of `Port`, and even from the implementation detail of
> whether the reactor even *uses* `Port` or not.
> All you rely on is `reactor.adoptStreamPort` which is a nice, documented,
> tested, intentionally-public interface. :)
> 
> (For SSL, then you can wrap your own twisted.protocols.tls wrapper around the
> factory - which is all the reactor's listenSSL does these days, anyway).
> 
> Hope this helps,
> 
> Jean-Paul
> 
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python@twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to