开头
好友系统几乎是每个网络游戏都有的系统,以下用Erlang以例,分享一种好友系统的具体实现方式。
存储
可直接以user_id为key,存在ETS或序列化后存在Redis等公共安全的内存数据区域
存储在游戏公共区域的原因:
如果好友相关的信息存在角色(actor)的私有数据里面,在添加好友时,假设被添加方在线,就需要修改其已加载到内存中的数据;假设被添加方不在线,也需要修改其在数据库中的数据,过程麻烦且不易维护内存与DB的一致性,因此存储在公共可访问的内存里。
数据结构
%% 好友列表结构
-record(friend_list, {
user_id = 0,
list = [],
}).
%% 好友的数据结构
-record(friend_data, {
user_id = 0, %% 好友user_id
type = 0, %% 类型
data = #{} %% 扩展数据
}).
好友类型
-define(STRANGER,0).%% 陌生人
-define(GOOD, 1). %% 好友
-define(BLACK, 2). %% 黑名单
-define(APPLY, 3). %% 申请列表
每种类型都存在同一个列表中,取出来的时候再进行分类。
操作
1、好友列表
根据userid为key从内存中取出好友列表信息,进行好友列表