gpt4 book ai didi

architecture - 在 OTP/Erlang 中将 ID 映射到进程的惯用方式是什么?

转载 作者:行者123 更新时间:2023-12-03 09:26:37 24 4
gpt4 key购买 nike

我有一个游戏服务器,它托管一个游戏的多个实例。玩家可以输入一个 ID 加入当前正在运行的游戏。为了将客户端与他们想要的游戏实例配对,我有一个 ETS 表,它将游戏 ID 映射到处理该特定游戏实例的 Erlang 进程的 PID。虽然这行得通,但我不太喜欢必须使用 ETS,因为它会创建不受任何进程控制的全局数据。

我想知道的是:在 Erlang/OTP 中是否有一种惯用的方法将标识符映射到进程?在这种情况下使用 ETS 可以吗,因为数据本质上是全局性的?或者我应该有一个进程来存储所有 ID 的字典来处理映射吗?我觉得这更像是 Erlang 风格,但可能没有那么高效或并发。我也遇到了gproc在查看其他 SO 答案时,这似乎是一个改进的过程字典。然而,我的印象是使用流程字典是不受欢迎的(according to the erlang.org web page)。

最佳答案

ETS 表 可以由给定的进程/gen_server 控制,并且它们的所有权可以在出现问题时通过 ets:give_away/3 从一个进程转移到另一个进程或 heir option 在创建表的过程中。

许多游戏开发者依赖于 memcached 之类的东西,它(故意)与 ETS 没有区别。然而,mnesia 是一个非常稳定的 OTP 应用程序,与 ETS 相比,它可以处理更多的并发更新。我们在非常繁忙的应用程序中使用过 mnesia,它从未出现过宕机,除非整个 VM 因其他问题而宕机。实际上,大多数用 erlang 构建的可用系统确实依赖于 mnesiaETS 来在冗余组件之间共享状态,以便当一个故障转移到另一个时,内存中的数据可用.

gproc 是一个非常方便的工具,尤其适用于游戏之类的东西。这是因为,一个进程依赖于它自己易于访问的数据。没有其他进程可以查找另一个进程的数据。因此,除了在 ETS 中保存游戏状态,您还可以使用 gproc

无论如何,如果你有时间,你可以尝试每个选项并做一些负载测试,看看哪个性能更好。

关于architecture - 在 OTP/Erlang 中将 ID 映射到进程的惯用方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11027555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com