[Twisted-Python] How to get protocol function do not block server?
manlio_perillo at libero.it
Tue Sep 26 06:31:33 EDT 2006
Norman Tindall ha scritto:
> I am a newbie in twisted, sorry if this was asked thousands times
> I have wrote a simple protocol (over TCP sockets) with crc32.
> Suppose one client made a handshake.. and then sends to server 10Mb of
> data... at the end of that 10Mb there is an crc32..
You can require a max size for the packets.
A more general solution is to do the job in chunks:
>From Python documentation:
print binascii.crc32("hello world")
# Or, in two pieces:
crc = binascii.crc32("hello")
crc = binascii.crc32(" world", crc)
Here is an example of computing the edonkey2k hash:
"""Wait for the specified amount of seconds.
To be used in a deferred generator.
from twisted.internet import reactor
d = defer.Deferred()
reactor.callLater(seconds, lambda: d.callback(None))
"""XXX TODO use a smaller file buffer size (8096 bytes?)
use a thread?
XXX TODO add support for md5, sha1 and crc32.
from Crypto.Hash import MD4
# this is used as file buffer size, too
CHUNK_SIZE = 9728000
# XXX delay to give the reactor a chance
DELAY = 0
hashList = 
fp = file(path, 'rb')
hash = MD4.new()
data = fp.read(CHUNK_SIZE)
if len(data) == 0:
if len(data) < CHUNK_SIZE:
# compute the hash of the hash list
hash = MD4.new()
You can do the same, using cStringIO.
> crc32 is a pretty time consuming task on a slow machine..
> while server calculates crc32 of 10Mb sent by client one,
> other clients can not communicate with server
> (i tryed by myself to log in while transfer.. and i was wating about a
> 10 seconds)
> And also i have a UnCryptAFrame time consuming function.
Check if the encryption can be done in chunks.
Regards Manlio Perillo
More information about the Twisted-Python