首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数据库中删除死玩家

问从数据库中删除死玩家
EN

Stack Overflow用户
提问于 2022-10-14 13:48:55
回答 1查看 20关注 0票数 0

我有这个REST的游戏,你可以加入多人,并自动被分配到一个大厅,并与世界各地的人玩。

当player连接到multiplayer时,它们会向API /connectToGame发送一个请求,其中包含头中的授权令牌。

1.我把他们的sessionId从承载令牌(令牌是通过另一条路径提供给玩家),首先我找到一个可用的大厅,空的播放器插槽,我把他们的sessionId推到那个大厅的会话数组(让他们的sid是1002783919)

在这之后,大厅看起来是这样的:

代码语言:javascript
复制
{
  "_id": "63495c6ff4de52ec18eb4978",
  "lobbyId": "e3504041-5eb6-4036-a23a-14ff815c1d45",
  "sessions": [
    1002783919
  ],
}

2.我为玩家创建一个会话对象,其中包含他们的sid和player信息,并将lobbyId从他们加入的大厅分配给player对象。

代码语言:javascript
复制
{
  "_id": "63495e81e2aab91b8d2f9823",
  "sessionId": 1002783919,
  "lobbyId": "e3504041-5eb6-4036-a23a-14ff815c1d45",
  "player": {
    "avatar": 372,
    "name": "TEST",
    "onlinescore": 1,
    "country": 8519
  },
  "updatedAt": "2022-10-14T12:56:15.373+00:00"
}

每隔5秒,游戏就会点击服务器,我会将玩家的会话updatedAt更新为Date.now(),这样我就知道这个会话仍然存在,并且正在被使用。

在这里之前没有问题,我只是想给你们看看这个过程

如果玩家想离开多人游戏,游戏就会发布/leaveGame,里面有他们的会话in。当发生这种情况时,我只需取下他们的sid,从大厅中删除sid,并删除他们的会话条目。

但有时,玩家可能只是意外地关闭了他们的游戏,这将不会给游戏留下任何机会来完成leaveGame的要求。因此,会话条目和大厅中的sid将永远停留在数据库中。

我在想一种方法,我可以删除死球员的入口和他们的游说sid从数据库和有人告诉我使用节点cron和检查每30秒死亡的球员,并删除他们。如果会话的updatedAt在1分钟内没有更新(因为玩家每5秒就会有一个服务器),您就可以判断会话是否还活着。你们认为这是一种有效的方法还是有更好的方法来做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2022-10-14 15:35:56

一种解决方案似乎是在字段updatedAt上添加TTL索引,并设置一些您想要的时间,比如1分钟,这样如果updatedAt值比当前时间早-1分钟,mongo将自动删除它。

博士:https://www.mongodb.com/docs/manual/core/index-ttl/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74070265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档