在前面两篇的基础框架上引入可供skynet服务间数据共享的库,灵感是之前用Erlang写游戏业务时候,经常会用到ets来存储共享数据。ets表 是 Erlang 提供的一种高效的数据存储机制,可以看作是一个键值存储,其中每个键可以唯一标识一个值,支持快速的访问和修改操作。
skynet本身也有提供了sharetable,sharedata等库可以操作共享数据,但是相比以往用Erlang的ets使用上会复杂一丢丢,当做学习和扩展,就封装一个简单的ets库,提供查询/插入/更新/删除/清表的几种操作,在不同服务间可共享和查询/更新,线程安全。
使用场景:
比如需要保存当前服所有在线玩家信息,每个玩家信息包含玩家id,玩家服务进程addr,登录时间三部分。那就需要一张表名online_users的表来保存信息列表,而保存的信息列表中,key就是玩家id,val则是{id = 玩家id, addr = 玩家服务进程, login_time = 登录时间}。
代码示例:
A服务初始化和插入 (初始化只需要任意一个服务初始化一次即可)
local ets = require "db.ets"
--初始化表
ets.init("online_users")
--插入数据
local res = ets.insert("online_users", 玩家id(1001), {
id = 玩家id, addr = 玩家服务进程1, login_time = 登录时间})
assert

最低0.47元/天 解锁文章
766

被折叠的 条评论
为什么被折叠?



