Asinhrons serveris 5 minūtēs ar Twisted

2009-12-08 21:25:12 UTC by maris in python, Twisted,

Vienkārša asinhrona server piemērs ar defered pielietojumu. Dotais piemērs nodarbojas ar to ka saņem stringu un atgriež stringa hash summu, pēc EOF pātrauc savienojumu. Lai neaizmirstu :) #!/usr/bin/env python from twisted.protocols.basic import LineReceiver from twisted.internet import reactor, protocol, defer import re class SimpleServer(LineReceiver): defer.setDebugging(True) # Twisted Method, is called when connection has been made def connectionMade(self): self.sendLine("Hi %s"%(self.transport.getPeer()[1])) # Twisted Method, is called when connection has been lost def connectionLost(self, data): print "Calling Connection lost" # Twisted Method, is called when line is received def lineReceived(self, line): # If line is EOF, disconnecting if re.search('^EOF$',line): # Twisted method to disconnect self.transport.loseConnection() else: # Creating defered object defered = self.DeferedFunction('%s'%(line)) # Adding Callbec to be run, when result is ready defered.addCallback(self.ReturningFunction) # Function which is doing defered stuff def DeferedFunction(self, data): # initng defered d = defer.Deferred() import hashlib digest = hashlib.sha224(data).hexdigest() # Sending data to callback d.callback('String hash: %s'%(digest)) # returning deferd object return d # Callback function def ReturningFunction(self, data): # Returning result to client self.sendLine("%s"%(data)) def main(): factory = protocol.ServerFactory() factory.protocol = SimpleServer reactor.listenTCP(1100,factory) reactor.run() if __name__ == '__main__': main()

Komentāri:

Pievieno komentāru