Erlang应该如何处理公共数据?

Erlang应该如何处理公共数据?,erlang,Erlang,假设我正在使用Erlang构建游戏服务器 每个用户都会检查一些东西(如查找最接近的玩家),因此通常会有一个管理类 在上面的例子中,我们使用互斥锁 据我所知,Erlang通常会为每个TCP连接(用户会话)创建新的Erlang进程。 那么,用户会话列表如何循环 如果我有这些用户会话的父进程,并询问父进程,这可能是一个瓶颈?现在,在继续之前,您可以查看以下问题和答案:、和 现在,了解和。然后你也许可以看看。创建一个进程来保存状态数据(特别是针对游戏)是危险的,因为当进程退出时,状态可能会丢失。重启崩溃

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

每个用户都会检查一些东西(如查找最接近的玩家),因此通常会有一个管理类

在上面的例子中,我们使用互斥锁

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


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

现在,在继续之前,您可以查看以下问题和答案:、和

现在,了解和。然后你也许可以看看。创建一个进程来保存状态数据(特别是针对游戏)是危险的,因为当进程退出时,状态可能会丢失。重启崩溃的进程很容易,但它所保存的数据丢失了。通常,我们需要内存中的数据存储,除非整个erlang VM停机,否则这些数据存储不会丢失(在这种情况下,如果您需要RAM之外的持久性,则仍然需要内存或内存)

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


只需进一步研究Erlang中使用的内存存储。顺便说一句,它也可以使用erlang VM之外的存储,如Memcached、Raik、CouchBase、e.t.c。然而,在某些情况下,游戏可以分解为一个数据结构,例如,或者可以保存在进程字典中的数据结构。此外,这将取决于如何向客户提供游戏服务。如果游戏使用HTTP(RESTFUL),那么您还将了解应用哪些Erlang库(,e.t.c.)。只要遵循这一点,你就会发现一切。

真的很有帮助!谢谢你!简单地说,状态由
进程维护
,通过向那些
进程
收件箱发送消息来改变状态