游戏服务器之聊天频道设计
1.背景:
对于一款网络游戏来说,聊天是基础的交互功能。常见了聊天频道有私聊,世界,公会,队伍,甚至所有服都连接起来的全服聊天。
本文主要目的是,设计一套简单通用的聊天框架。
基本思想:
使用统一的API处理所有的聊天频道。
并非所有聊天记录都需要存放到数据库,例如世界聊天,由于交互时效问题,重启丢失消息也可以接受。
2.聊天基础
基本流程是:
- 当玩家发送聊天的请求消息,先判断指定的频道能否发送,例如私聊的时候我方是否是对方的黑名单;
- 验证通过后,将消息保存到内存或者数据库,直接返回发送成功的返回值给客户端;
- 服务器收集指定频道的消息接收者列表,异步推送给所有玩家。
- 当玩家登录的时候,需要统一收集所有频道的离线消息,一次性推给客户端。
对一些基础的操作作抽象,如下:
/*** 聊天频道处理器*/
public interface Cha