在实现dataReceived方法时,在Twisted中,似乎没有任何示例引用被分段的数据包。用其他每种语言,这都是您手动实现的,所以我只是想知道这是否已经为您完成了呢?如果是这样,我是否需要给我的数据包加上长度报头前缀?还是我必须手动执行此操作?如果是这样,那会是什么方式?
最佳答案
在dataReceived方法中,您以不确定长度的字符串形式获取数据,这意味着它可能是协议(protocol)中的完整消息,也可能只是某些“客户端”发送给您的消息的一部分。您将必须检查数据以查看其是否包含协议(protocol)中的整个消息。
我目前在我的一个项目中使用Twisted来实现协议(protocol),并决定使用struct模块打包/解压缩我的数据。我正在实现的协议(protocol)具有固定的 header 大小,因此在读取至少HEADER_SIZE个字节之前,我不会构造任何消息。总消息大小在此头数据部分中声明。
我猜您实际上不需要将消息长度定义为协议(protocol)的一部分,但它会有所帮助。如果您未定义消息,则必须使用特殊的定界符来确定消息的开始/结束时间。 FIX协议(protocol)如何使用SOH字节定界字段。尽管它确实有一个必填字段,可以告诉您一条消息的长度(只是一条消息中没有多少个字段)。
关于Python/Twisted-TCP数据包分段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/460144/