There are a number of limits you might encounter when using Perspective Broker. This document is an attempt to prepare you for as many of them as possible so you can avoid them or at least recognize them when you do run into them.
Perspective Broker is implemented in terms of a simpler, less
functional protocol called Banana. Twisted’s implementation of Banana
imposes a limit on the length of any sequence-like data type. This applies
directly to lists and strings and indirectly to dictionaries, instances and
other types. The purpose of this limit is to put an upper bound on the
amount of memory which will be allocated to handle a message received over
the network. Without, a malicious peer could easily perform a denial of
service attack resulting in exhaustion of the receiver’s memory. The basic
limit is 640 * 1024 bytes, defined by twisted.spread.banana.SIZE_LIMIT
.
It’s possible to raise this limit by changing this value (but take care to
change it on both sides of the connection).
Another limit imposed by Twisted’s Banana implementation is a limit on
the size of long integers. The purpose of this limit is the same as the
SIZE_LIMIT
. By default, only integers between -2 ** 448 and 2
** 448 (exclusive) can be transferred. This limit can be changed using
twisted.spread.banana.setPrefixLimit()
.
Perspective Broker imposes an additional limit on top of these lower
level limits. The number of local objects for which remote references may
exist at a single time over a single connection, by default, is limited to
1024, defined by twisted.spread.pb.MAX_BROKER_REFS
. This limit
also exists to prevent memory exhaustion attacks.