name5566 / leaf

A game server framework in Go (golang)
Apache License 2.0
5.27k stars 1.31k forks source link

请问server_db_example里UserData的保存策略是怎样的 #108

Closed jjjjilyf closed 6 years ago

jjjjilyf commented 6 years ago

`func (user User) autoSaveDB() { const duration = 5 time.Minute

// save
user.saveDBTimer = skeleton.AfterFunc(duration, func() {
    data := util.DeepClone(user.data)
    user.Go(func() {
        db := mongoDB.Ref()
        defer mongoDB.UnRef(db)
        userID := data.(*UserData).UserID
        _, err := db.DB("game").C("users").
            UpsertId(userID, data)
        if err != nil {
            log.Error("save user %v data error: %v", userID, err)
        }
    }, func() {
        user.autoSaveDB()
    })
})

}`

这里是每个玩家Login成功和Logout之后会调用这个自动保存的函数autoSaveDB,5分钟后保存一次。 是这样 每个玩家创建一个saveDBTimer好呢?还是使用一个定时器给所有玩家统一5分钟保存一次好呢? 谢谢回答

name5566 commented 6 years ago

按范例做法就可以了。

jjjjilyf commented 6 years ago

好的,3Q