PB 限制

在使用 Perspective Broker 时,您可能会遇到一些限制。本文档旨在尽可能地为您准备这些限制,以便您能够避免它们,或者至少在遇到它们时能够识别出来。

Banana 限制

Perspective Broker 是基于一个更简单、功能更少的协议 Banana 实现的。Twisted 的 Banana 实现对任何类似序列的数据类型的长度施加了限制。这直接适用于列表和字符串,间接适用于字典、实例和其他类型。此限制的目的是对处理通过网络接收的消息所分配的内存量设置上限。如果没有此限制,恶意对等方可以轻松地执行拒绝服务攻击,导致接收方内存耗尽。基本限制为 640 * 1024 字节,由 twisted.spread.banana.SIZE_LIMIT 定义。可以通过更改此值来提高此限制(但请注意,需要在连接的两端都进行更改)。

Twisted 的 Banana 实现施加的另一个限制是对长整数大小的限制。此限制的目的是与 SIZE_LIMIT 相同。默认情况下,只能传输 -2 ** 448 到 2 ** 448(不包括)之间的整数。可以使用 twisted.spread.banana.setPrefixLimit() 更改此限制。

Perspective Broker 限制

Perspective Broker 在这些更低级别的限制之上施加了额外的限制。默认情况下,通过单个连接在单个时间可以存在远程引用的本地对象数量限制为 1024,由 twisted.spread.pb.MAX_BROKER_REFS 定义。此限制也存在是为了防止内存耗尽攻击。