Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Twisted Logic: Endpoints and Why You Shouldn't Be Scared of Twisted

Twisted Logic: Endpoints and Why You Shouldn't Be Scared of Twisted

This talk will be a survey of my learning experience adding new endpoint APIs to Twisted, an event-driven networking engine (as a Google Summer of Code project), with a special focus on the analysis of some of the horror stories that surround Twisted. Right from the asynchronous I/O model to Deferreds: if it scares you, we’ll figure a way out and see what the makers of Twisted say when confronted.

Ashwini Oruganti

March 15, 2013
Tweet

More Decks by Ashwini Oruganti

Other Decks in Programming

Transcript

  1. Google Summer of Code spend the summer working on an

    open source project with a mentoring organization
  2. Endpoint an interface with a single method that takes an

    argument returns*: a listening port / a connected protocol
  3. class TCP4ServerEndpoint(object): """ Implements TCP server endpoint with an IPv4

    configuration """ ... def __init__(self, reactor, port, backlog=50, interface=''): ... def listen(self, protocolFactory): return defer.execute( self._reactor.listenTCP, ...)
  4. class TCP6ServerEndpoint(object): """ Implements TCP server endpoint with an IPv6

    configuration """ ... def __init__(self, reactor, port, backlog=50, interface='::'): ... def listen(self, protocolFactory): return defer.execute( self._reactor.listenTCP, ...)
  5. class StandardIOEndpoint(object): """ A Standard Input/Output endpoint """ implements(interfaces.IStreamServerEndpoint) def

    __init__(self, reactor): ... def listen(self, stdioProtocolFactory): return defer.execute(stdio.StandardIO, stdioProtocolFactory.buildProtocol( PipeAddress()))
  6. Moral of the story: Do not get flustered. Do not

    overthink.. Forget it's Twisted
  7. class TCP6ClientEndpoint(object): def __init__(self, reactor, host, port, timeout=30, bindAddress=None): ...

    def connect(self, protocolFactory): """ Connect via TCP, once the hostname resolution is done. """ ...
  8. def _nameResolution(self, host): """ Resolve the hostname string into a

    tuple containing the host IPv6 address. """ ... def _resolvedHostConnect(self, resolvedHost, protocolFactory): """ Connect to the server using the resolved hostname. """ ...
  9. class SomeState(object): def __init__(self): self.values = [] def getValue(self): return

    self.values.pop(0) def addValue(self, value): self.values.append(value)
  10. “It was created by a couple of dudes who dropped

    out of school, and a 16-year-old. HOW HARD COULD IT BE?”