我想使用协议在服务器/客户端之间发送数据:超过 65,535 字节限制大小的unicode(字符串)列表。处理限制大小问题的一个很好且干净的解决方案是实现生产者/消费者模式。
不幸的是,我阅读了文档和示例,但找不到如何开始。对于小规模的传输数据,我的放大器实现效果很好。我在这里展示了我的代码的相关部分。
命令
class DataCommand(Command):
response = [("data", ListOf(Unicode()))]
errors = {
KeyError: "KEY_ERROR",
ValueError: "VALUE_ERROR",
}
服务器
class ProducerLocator(CommandLocator):
def __init__(self,size,N):
self.data = [id_generator(size=size) for x in range(N)]
@DataCommand.responder
def getData(self):
return {'data':self.data} ## don't work if is self.data > 64kB
客户
class Consumer:
d = connect()
def getData(protocol):
return protocol.callRemote(DataCommand)
d.addCallback(getData)
一些生成数据的代码(在上面的工厂构造函数中使用)
import string
import random
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))