一般长连接应用层的包都是 包长度+内容 这种类似格式,读的时候先读包头获取内容长度,再读内容,假如从包头中获取内容长度后读内容发生了意外,那该怎么办? 如果重新读,貌似就错位了,是不是一般遇到这种情况是用断开连接处理?
我举个例子好理解一点,比如客户端连发2个消息,第一个消息格式是2个字节包头,20个字节内容, 第二个消息是2个字节包头,50个字节内容,服务端收第一个消息后读内容发生错误了,如果重新read,那岂不是读到第二个消息或者第一个消息没读完的部分?这个好像是只要有一个消息如果发生错误,后续消息全部错位?
这个问题是不是通常情况都是做断开连接处理?
必须断开连接。
不然,我构造一个头,声明长度是2**31的长度,开N个连接,然后我做下面的恶意动作的话:
1. 然后就不发任何码流,server就会一直等后续数据,被ddos
2. 然后一直发码流,server被疯狂占用内存,继而被ddos
#1