每 5 秒检查一个数据库值的成本很高,因为用户数量很多,比如 10000 或更多?[已结束]

Checking a database value per 5 seconds is expensive with a lot of user count like 10000 or more? [closed]

提问人:Burak Yücel 提问时间:12/18/2017 更新时间:12/18/2017 访问量:116

问:


想改进这个问题吗?通过编辑这篇文章来更新问题,使其仅关注一个问题。

5年前关闭。

我正在使用 Unity 编写一款多人 RPG 游戏,在战斗场景中,玩家必须确定她或他使用哪种攻击。当玩家按下攻击按钮时,玩家向服务器发送一个发布请求,服务器进行强制性检查,如果发布请求合法,则服务器将数据库值标记为“on”,或者准确地说,将其从“0”变成“1”,例如,称为“attack_determined”。

问题是,我必须再次发出http请求来检查这个值。一场战斗中最多有 6 个字符,如果所有人都想检查attack_determined是 0 还是 1,则每个攻击请求会发出 6 个请求。例如,我不想考虑用户数量是否增加到 10000。处理我正在使用的 VPS 服务器的这些请求会非常困难。有什么方法可以减少请求计数吗?我不想使用套接字,我正在考虑使用会话或 memcache。我在服务器端使用 PHP,在 Unity 客户端使用 C#。

C# PHP Unity-Game-Engine 服务器端 客户端

评论

3赞 David Schwartz 12/18/2017
这似乎是设计交互式事物的一种非常糟糕的方式。
0赞 Eimsas 12/18/2017
我同意@DavidSchwartz你需要重新思考你的架构。
3赞 Marc Gravell 12/18/2017
如果你有类似 Web 的东西(可能是浏览器内 UI,或者可能是使用 http 而不是专用套接字协议的客户端应用),则 Web 套接字是一种合适的方法。它非常适合您正在尝试执行的操作(并且更高;我们的 Web 套接字服务器目前有 450k 开放连接)。每隔几秒钟进行一次 Http 轮询:会立即杀死我们。如果您将所有其他流量合并到同一个网络套接字上:那就更好了。
0赞 Muhammad Faizan Khan 12/18/2017
使用 UNET,其简单的 make 脚本,通过命令和 rpc 函数添加不同的变量和减号或添加。

答:

6赞 Programmer 12/18/2017 #1

我不想使用套接字

使用 WebSockets。

您可以使用 websocket 独立库或使用 Unity 的网络 API 并在其上启用 websocket。如果您决定使用 Unity Network API,只需将 NetworkServer.useWebSockets 设置为 即可启用此功能。true

启用后,Unity 将从套接字切换到 websocket。如果你只是在 WebGL 应用程序上工作,你可以看看 assetstore 上的这个 websocket 插件。