在dataReceived方法中,您将数据作为一个不确定长度的字符串返回,这意味着它可能是您协议中的整个消息,或者它可能只是某个"客户端"发送给您的消息的一部分.您必须检查数据以查看它是否包含协议中的整个消息.
我目前正在我的一个项目中使用Twisted来实现协议,并决定使用struct模块来打包/解压缩我的数据.我正在实现的协议具有固定的头大小,所以在我读取至少HEADER_SIZE字节数之前,我不构造任何消息.总消息大小在此标头数据部分中声明.
我猜你真的不需要将消息长度定义为协议的一部分,但它有所帮助.如果您没有定义一个,则必须有一个特殊的分隔符来确定消息的开始/结束时间.排序FIX协议如何使用SOH字节来分隔字段.虽然它确实有一个必填字段,告诉你消息有多长(而不是消息中有多少个字段).
在处理TCP时,你应该忘记所有"数据包"的概念.TCP是一种流协议 - 您将数据流传输到另一端的数据流.一旦数据被发送,只要数据全部以正确的顺序到达,就允许它根据需要到达尽可能多的块.您必须像使用其他语言一样手动进行分隔,使用长度字段,消息类型字段或特殊分隔符等.
| 归档时间: |
|
| 查看次数: |
3650 次 |
| 最近记录: |