Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

区分各种消息

一、现实意义

  • 抛出问题:
    当将序列化的2进制数据发送给对象时,对方如何区分?
  • 举例:
    PlayerInfo:玩家信息
    ChatInfo:聊天信息
    LoginInfo:登录信息
    等等
    这些数据对象序列化后是长度不同的字节数组
    将它们发送给对象后,对方如何区分出他们分别是什么消息
    如何选择对应的数据类反序列化它们?

二、解决方法

  • 解决方案:
    为发送的信息添加标识,比如添加消息ID
    在所有发送的消息的头部加上消息ID(int、short、byte、long都可以,根据实际情况选择)
  • 举例说明:
    消息构成
    如果选用int类型作为消息ID的类型
    前4个字节为消息ID
    后面的字节为数据类的内容
    ####***************
    这样每次收到消息时,先把前4个字节取出来解析为消息ID
    再根据ID进行消息反序列化即可

三、实现思路

  1. 创建消息基类,基类继承BaseDatd,基类添加获取消息ID的方法或者属性
  2. 让想要被发送的消息继承该类,实现序列化反序列化方法
  3. 修改客户端和服务端收发消息的逻辑

评论