我正在编写一个扭曲的服务器来读取高达64KB的TCP消息。我发现mt datareciever每1380字节由linereciever类调用,结果证明是Windows客户端的TCP帧大小。有没有办法解决这个问题,而不必循环遍历这些1380字节块?
from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.enterprise.adbapi import ConnectionPool
class CSVReceiver(Protocol):
def dataReceived(self, line):
print 'line RX :', len(line) , ' : ' , str(line)
调用dataReceived并打印每1380个字节,例如当我们的服务器发送6KB的TCP消息时为4X。任何避免这种情况的方法,以便我们可以在一次回调中处理整个字符串?
谢谢。
STAN
答案 0 :(得分:1)
你在python_forum上问了这个问题,我在那里回答你。您希望使用LineReciever,并且希望将MAX_LENGTH
设置为更高的数字。
答案 1 :(得分:1)
TCP发送数据流,而不是消息。中间网络可能会将您的流分成任意小块以进行传输。如果您可以控制发生这种情况的整个网络,则tune your Windows clients可以使用不同的窗口大小。但是,您可能还需要专门配置本地路由器以支持Jumbo frames,因为即使以太网默认也不支持超过1500个八位字节的帧。
基本上,对于任何网络,但最简单的例子,你的问题的答案是“不”。但是,你为什么要关心这个? LineReceiver
存在的全部原因是为了向您提供整行,而不是担心从TCP流中出现单个任意大小的数据块。