[Twisted-Python] restricting twisted web to a single connection

Andrew Bennetts andrew-twisted at puzzling.org
Tue Jun 17 19:46:04 MDT 2003


On Tue, Jun 17, 2003 at 05:10:55PM -0500, Don Hiatt wrote:
> Hello,
> 
> I'm just getting started with twisted and have a question
> about twisted web. How would I go about limiting the web
> server to accepting a single connection? I know you might
> be asking your self why anyone would want to do such a 
> stupid thing, but I'm controlling some hardware and need
> to restrict access to it to a single user at a time.
> 
> Anyway, I'd appreciate any pointers. :-)

You'll probably have to subclass twisted.web.server.Site to make
buildProtocol return None if a connection is active.  Untested code from the
top of my head:

from twisted.protocols.http import HTTPChannel
from twisted.web.server import Site

class SingleConnectionHTTPChannel(HTTPChannel):
    def connectionLost(self, reason):
        self.factory.connections -= 1
        HTTPChannel.connectionLost(self, reason)

class SingleConnectionSite(Site):
    protocol = SingleConnectionHTTPChannel
    connections = 0
    def buildProtocol(self, addr):
        # Reject concurrent connections
        if self.connections:
            return None
        self.connections += 1

        return Site.buildProtocol(self, addr)

-Andrew.





More information about the Twisted-Python mailing list