Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

实现一个能监听数据变化的数据同步模块 #3

Open
hanxi opened this issue Dec 20, 2020 · 5 comments
Open

实现一个能监听数据变化的数据同步模块 #3

hanxi opened this issue Dec 20, 2020 · 5 comments
Labels
enhancement New feature or request

Comments

@hanxi
Copy link
Owner

hanxi commented Dec 20, 2020

这里有介绍了几种同步数据的模块

https://github.com/cloudwu/skynet/wiki/ShareData

但是缺少一种能够监听数据变化的情况。

比如有个记录玩家在线状态的表:

online_users = {} -- user id -> agent id

当玩家下线后:

online_users[uid] = nil

其他服务能有接口监听到这个下线事件:

function on_offline_event(uid)
    -- 处理玩家下线逻辑,比如从场景里清除
end

function online_users_changed(uid, agentid)
    if agentid == nil then
        on_offline_event(uid)
    end
end
sharedata.add_listener("online_users", online_users_changed)
@hanxi hanxi added the enhancement New feature or request label Dec 20, 2020
@hanxi hanxi changed the title 实现一个能监听的数据变化的同步模块 实现一个能监听数据变化的数据同步模块 Dec 20, 2020
@cloudfreexiao
Copy link

cloudfreexiao commented Dec 21, 2020

现有的 sharedata 或 sharetable 能 满足 这种需求吗 ?
我咋 感觉 只能通过 广播来做

@hanxi
Copy link
Owner Author

hanxi commented Dec 21, 2020

打算采用 skynet.multicastskynet.datacenter 来做。

@cloudfreexiao
Copy link

cloudfreexiao commented Dec 21, 2020

需要考虑的问题

  1. 在 广播 没到 对应的服务 触发对应的 监听 方法 这段时间 如何处理
  2. 如果 是处理 大量 玩家 频繁上下线 状态 不知道 广播是否会慢 导致 1 现象出现的概率 变大 (纯瞎猜)

不过我觉得 这种方案 还是 可以接受的

@hanxi
Copy link
Owner Author

hanxi commented Dec 22, 2020

消息同步不及时的问题是需要考虑的,比如 agent 已经不存在了,推送消息的时候忽略掉即可,写逻辑时考虑这份数据是不实时的就没啥问题。

玩家频繁上下线的问题可以通过另外的方案处理,比如这种方案:

https://github.com/ejoy/goscon

@cloudfreexiao
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants