再谈消息包和几张图

1048576 内部server之间 send recvbuffer大小

32767  gateserver对AS客户端之间 send recvbuffer大小

要发消息,触发发送事件,那么把现在sendlist的消息发送完,如果长度大于sendbuffer长度,那么就发送最大的sendbuffer

问:一个消息不是断了吗?

答:记录位置,记录消息体写到哪了 下次发送的时候继续从记录位置往后的写入


读的时候取出来的数据可能 小于头 4个字节,可能大于4 ,每次receive从内核取出来放到应用层不一定就是一个完整的4+xxx的包,可能只取了一部分,如果这次一开始小于4,那么不解析,第二次调receive,得到50字节,因为上次比如只取了1字节,这次就先取三个字节,然后解析这四字节,比如100,0 就说明上面图里面的a是100,然后解析后面的,但是这次后面的只剩下50-3=47字节,那么读完47 。第二次receive到的字节,比如是200,那么就取前面的53字节,这53字节是作为上次剩下的,读完53,然后剩下的 再从头4字节解析

里面的消息体124+xx也是一样,每次读到的未必读完,比如得到消息体长度50,那么后面读,但是要判断后面你能不能读50字节,有可能再一个大包里面,有可能不在,如果根据大包的包头算出来本大包后面只有40字节,那么后面剩下的10字节肯定是在下一个大包了,得先解析下一个大包的头4个字节,然后后面的10个字节才是上一个消息的,  否则直接度50个作为消息,后面就乱了


 要判断各种情况,一个消息体(比如sm_move)接没接收完,读到哪了,以及一个大包有没有接受完,接到哪了, 
 要注意这两个关键数字






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值