(我几乎没有使用Erlang的经验,只读了一些书) 假设我正在使用Erlang构建游戏服务器。
每个用户检查一些东西(例如,找到最接近的玩家)是非常普遍的,所以通常会有一个经理类。
在上述情况下,我们使用互斥锁。
据我所知,Erlang通常会为每个TCP连接(用户会话)创建新的Erlang进程。 那么,如何传播用户会话列表?
如果我有这些用户会话的父进程并询问父进程,它可能是一个瓶颈?
答案 0 :(得分:12)
现在,在您继续之前,您可以查看以下问题和答案: Erlang: Distributed work on an array, Erlang gen_server with long-running tasks和 {{3} }
现在,了解What is the best, most efficient, Client pool technique with Erlang和ETS Tables。然后你可以看看Mnesia。制作一个特别为游戏保存状态数据的过程是危险的,因为当进程退出时状态可能会丢失。它很容易重新启动崩溃的进程,但它所持有的数据丢失了。通常情况下,我们需要内存数据存储,它不会丢失,除非整个erlang VM发生故障(在这种情况下,如果你需要RAM之外的持久性,你还需要GProc或Mnesia)。
流程词典通常是气馁的,但它们仍被证明是非常有用的。但是,就个人而言,ETS表已经为我节省了很多。它们可以从一个崩溃过程转移到下一个崩溃过程。它们可以转储到磁盘或从磁盘加载,它们可以处理大量数据。
了解有关Erlang中使用的IN-Memory存储的更多信息。它的BTW也可以在erlang VM之外使用存储,如Memcached,Raik,CouchBase,e.t.c。但是,在某些情况下,可以将游戏细分为仅DETS Tables或Queues或Lists等数据结构,这是一种可以保存在流程词典中的数据结构。此外,它还取决于如何呈现客户端的游戏服务。如果游戏使用HTTP(RESTFUL),那么您还将了解要应用的Erlang库(Records,e.t.c。)。只需按照这整个Mochiweb, Yaws,你就会发现一切。