游戏聊天

    • 支持玩家与玩家私聊,保存私聊数据
    • 支持多个频道聊天(如队伍频道,公会频道,世界频道,系统频道)
    • 支持敏感词过滤
    • 游戏聊天模块通常是一个单独的进程(也有做法是把聊天模块放到游戏逻辑进程中)
      • 功能相对独立,移植性强
      • 减小逻辑服务器的压力
    • 玩家登录 gameworld 进程时,会把登录消息通知到 chat 进程
    • chat 进程生成玩家登录 token 通过 gameworld 进程(此时客户端和 chat 没有建立起连接)返回给客户端
    • 玩家客户端使用 token 连接到 chat 进程完成登录
    • channel:频道对象,其中主要成员是关注该频道的玩家 id 列表和该频道的历史消息
    • chat 服务器中有多个 channel,如 世界频道,系统频道,帮派频道(不同帮派对应不同 channel)等
    • 服务器启动时会创建固定频道(如世界频道和系统频道),帮派创建时会创建新的帮派频道(惰性创建)
    • 玩家登录会把玩家加入到其关注频道的玩家列表中,玩家下线会从频道的玩家列表中移除
    • 玩家发送信息会根据类型投递到对应的 channel 中,channel 会广播给关注该频道的用户并缓冲历史信息
    • 玩家私聊的信息一般会保存起来,而且能给离线玩家发送信息,这个在玩家逻辑进程中实现更加方便
    • 逻辑服务器中会维护一份玩家的缓存数据,这份数据会一直存在于服务器内存中,定时存盘
    • 玩家的私聊信息存放在玩家的缓存数据中,这样即使时玩家离线也能收到其他玩家的信息