4

假设我正在使用 Erlang 构建游戏服务器。

每个用户检查某事(例如寻找最近的玩家)是非常普遍的循环,因此通常有一个经理类。

在上述情况下,我们使用互斥锁。

据我所知,Erlang 通常为每个 TCP 连接(用户会话)创建新的 Erlang 进程。那么,用户会话列表是如何进行流通的呢?

如果我有这些用户会话的父进程并询问父进程,它可能是一个瓶颈?

4

1 回答 1

12

现在,在你继续之前,你可以看看这些问题和答案:Erlang: Distributed work on an array 具有长时间运行任务的 Erlang gen_server,以及什么是 Erlang 最好、最有效的客户端池技术现在,了解ETS TablesMnesia。然后你也许可以看看GProc。制作一个特别是为游戏保存状态数据的进程是危险的,因为当进程退出时状态可能会丢失。重新启动崩溃的进程很容易,但它所持有的数据会丢失。通常,我们需要不会丢失的内存数据存储,除非整个 erlang VM 宕机(在这种情况下,如果您需要 RAM 之外的持久性,您仍然需要DETS Tables或 Mnesia)。



过程字典通常不被鼓励,但它们仍然被证明是非常有用的。然而,就个人而言,ETS Tables 为我节省了很多。它们可以从一个崩溃的进程转移到下一个活着的进程。它们可以转储到磁盘或从磁盘加载,它们可以处理大量数据。

只需研究更多关于 Erlang 中使用的 IN-Memory 存储。它的 BTW 也可以使用 erlang VM 之外的存储,如 Memcached、Raik、CouchBase 等。但是,在某些情况下,游戏可以分解为一个数据结构,如QueuesListsRecords,一个可以保存在进程字典中。此外,这将取决于向客户端提供游戏服务的方式。如果游戏使用 HTTP (RESTFUL),那么您还将了解要应用哪些 Erlang 库(Mochiweb、Yaws等)。只需按照整个教程进行操作,您就会发现一切。

于 2012-07-05T12:56:42.057 回答