TwistedPython:最大包大小?嵌入式插座?

2024-09-29 23:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为服务器端实现一个基于Twisted的客户机-服务器解决方案,例如客户端使用Android phone。 因为Andoird仿真器不接受大于1500b(或更小?)的TCP包,我需要能够在服务器端分块数据包。每次“后不冲洗插座传输.写入,Twisted缓冲传出的数据,因此如果没有某种手动或自动刷新/maxpacketsize函数,分块将毫无用处。在Twisted里怎么做? 我很熟悉“反应器.doSelect(1) “函数,但由于我使用的是EPoll reactor(出于可伸缩性和性能的原因),我不能使用doSelect。是否可以更改Twisted中某些连接的maxPacketValue?在

希望有人能让我看到光明。。。在


Tags: 函数服务器客户端客户机服务器端twistedphone解决方案
2条回答

TCP是一种面向流的协议,而不是面向包的协议。当您调用transport.write时,该数据将被附加到TCP流中,并可能以任何数量的数据包发送出去;它可能被拆分,或者与下一个或上一个对write的调用粘在一起。这是一个相当的frequently asked question about Twisted,但是每个人问它的时候都会略有不同。在

您希望使用诸如AMP,或者更基本的LineReceiver这样的协议构造工具来划分协议中的消息,而不是依赖于数据包边界的随机性。在

TCP数据包由操作系统自动分块,应用程序所能做的就是提示何时刷新。除此之外,应用程序只需读写流。在

两个通信对等点的操作系统将根据Path MTU discovery链路上的MTU自动配置最大包大小。确保你没有阻止ICMP数据包使其工作。在

由于不太可能出现错误的MTU(而且MTU通常设置为1500或更少),您应该重新诊断您的问题,例如使用wireshark这样的包跟踪器。在

相关问题 更多 >

    热门问题