做消息推送服务器,自己设计了一套私有协议。
但是有一个问题。传统的 http 是一应一答的,消息推送是长链接的,如果客户端不按照规定的协议格式来传输数据,就会导致服务器端无法正常解析数据。
因为拆包粘包的问题,一旦缓冲区的部分数据异常,那么后边数据就会全部出错都无法解析(因为缓冲区的数据都是连续的,根据特定字节长度来读取字段数据:readInt/readLong/readChar 等)。
那么出现这样的错误数据无法解析,服务器端应该如何处理呢?
我的想法是,一个消息协议以某个特殊字符串开头(如:$^&* ),当服务器数据解析出错时,那么就把错误的数据全部 discard ,直到遇到下一个“$^&*”为止。
