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: