Erlang 应该如何处理通用数据?

2024-05-15

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

每个用户检查某些内容(例如找到最近的玩家)是很常见的,因此通常有一个管理器类。

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

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

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


现在,在继续之前,您可以查看以下问题和答案: https://stackoverflow.com/q/9104447/431620Erlang:数组上的分布式工作 https://stackoverflow.com/q/9104447/431620 , https://stackoverflow.com/q/8879177/431620Erlang gen_server 具有长时间运行的任务 https://stackoverflow.com/q/8879177/431620 , and https://stackoverflow.com/q/9097694/431620Erlang 最好、最高效的客户端池技术是什么 https://stackoverflow.com/q/9097694/431620

现在,了解一下碳排放交易体系表 http://www.erlang.org/doc/man/ets.html and Mnesia http://www.erlang.org/doc/man/mnesia.html。那么你也许可以看看GProc http://rustyklophaus.com/articles/20090916-GProcErlangGlobalProcessRegistry.html。创建一个进程来保存状态数据(特别是对于游戏)是危险的,因为当进程退出时状态可能会丢失。重新启动崩溃的进程很容易,但它所保存的数据会丢失。通常,我们需要内存中的数据存储,除非整个 erlang VM 宕机,否则数据不会丢失(在这种情况下,如果您需要 RAM 之外的持久性,则需要DETS 表 http://www.erlang.org/doc/man/dets.html或 Mnesia 仍然)。

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

只需更多地研究 Erlang 中使用的内存存储即可。顺便说一句,它还可以使用 erlang VM 外部的存储,例如 Memcached、Raik、CouchBase 等。然而,在某些情况下,游戏可以分解为数据结构,例如Queues http://learnyousomeerlang.com/a-short-visit-to-common-data-structures#queues, or Lists http://learnyousomeerlang.com/starting-out-for-real#lists or Records http://learnyousomeerlang.com/a-short-visit-to-common-data-structures#records,可以保存在进程字典中的数据结构。此外,这还取决于向客户提供游戏服务的方式。如果游戏使用 HTTP (RESTFUL),那么您还将了解要应用哪些 Erlang 库(Mochiweb、雅司病 https://stackoverflow.com/a/6466089/431620, ETC。)。只要遵循这个整体tutorial http://learnyousomeerlang.com/content,你会发现一切。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Erlang 应该如何处理通用数据? 的相关文章

  • 主管在重新启动子进程时会阻止呼叫吗?

    我试图了解这里发生了什么 我有一个主管正在循环重新启动一个客户端而不触发MaxR MaxT机制 客户端崩溃的速度足够慢 永远不会触发速率限制 本来会有另一种机制使用supervisor which children 1 and delete
  • 使用 OTP 原理的非阻塞 TCP 服务器

    我开始学习 Erlang 所以我尝试写 hello world 并发编程 IRC 机器人 我已经使用 Erlang 编写了一个 没有任何 OTP 细节 管理程序 应用程序等行为 我希望使用 OTP 原则重写它 但不幸的是我无法找出使用 OT
  • Erlang中如何维护状态?

    我见过人们使用口述 命令 记录用于维护我读过的许多博客中的状态 我发现这是一个非常重要的概念 一般来说 我理解维护状态和递归的含义 但是当涉及到 Erlang 时 我对它的处理方式有点模糊 有什么帮助吗 维护状态的最简单方法是使用gen s
  • erlang中如何将中缀转换为后缀?

    我刚刚遇到这个帖子 https stackoverflow com questions 4621151 the shortest way to convert infix expressions to postfix rpn in c 相当
  • 加密 (cryptojs) - 解密 (erlang)

    我有一个使用 cryptoJS AES 加密的值 需要使用 Erlang 加密库进行解密 对我来说问题在于能够在 Erlang 中使用解密aes cbc 128 decrypt Key IVec Cipher 我想 我需要知道使用的 IVe
  • Erlang停止gen_server

    我有 gen server start UserName gt case gen server start global UserName player of ok gt io format Player UserName started
  • 有没有办法对默认记录值进行查找?

    给定一个记录 record something id integer name string email undefined string undefined 有没有办法获取字段的默认值 在本例中得到的事实是 something email
  • Node.js 或 Erlang

    当谈到它们可以处理的并发级别时 我真的很喜欢这些工具 Erlang OTP 看起来是更稳定的解决方案 但需要更多的学习和深入研究函数式语言范例 看起来 Erlang OTP 在多核 CPU 方面做得更好 如果我错了 请纠正我 但我应该选择哪
  • 我们如何有效地处理 mnesia 记录的时间相关约束?

    我正在将记录写入mnesia 该记录应该保存在那里 仅在允许的时间 24 小时 内 24小时后 在用户修改其中的一部分之前 系统应该自动删除它们 例如 用户获得免费通话时间 用于语音通话 他们应该在给定时间内使用它们 如果他们不使用它 24
  • Erlang 如何并发处理访问邮箱

    关于如何使用erlang邮箱的信息有很多 但很少找到一篇论文或文档描述erlang如何在VM内部同时实际访问邮箱 据我了解 Erlang VM 必须执行锁定或 CAS 操作以确保消息完整性 erlang幕后有没有什么精巧的方法 我假设您所说
  • 如何使用 ibrowse 将附件上传到 CouchDB 中的文档?

    我已经使用curl上传图像文件Penguins jpg 例如 C curl gt curl vX PUT H Content Type image jpeg http localhost 5984 DBNAME DOCID Penguins
  • 将 erlang shell 作为守护进程/服务运行

    显然 我有一个在 Erlang shell 中运行的 Erlang 程序 我想监视它 这就是我要的 当机器启动时 Erlang shell 应该随之启动 并且在 shell 中运行的程序也应该随之启动 如果 Erlang shell 由于某
  • Erl 无法连接到本地 EPMD。为什么?

    Erlang R14B04 erts 5 8 5 source 64 bit rq 1 async threads 0 kernel poll false Eshell V5 8 5 abort with G root ip 10 101
  • Erlang get_tcp:recv数据长度

    I user gen tcp recv Socket 0 用于数据接收 但我只能接收1次1418字节 我怎样才能收到发送的数据量 in gen tcp recv Socket 0 您正在询问内核 给我接收缓冲区中现在可用的所有数据 不过 内
  • 如何将列表转换为元组列表?

    我想转换 z z a z z a a z to z 2 a 1 z 2 a 2 z 1 我该怎么做 所以 我需要累积以前的值 它的计数器和元组列表 我已创建记录 record acc previous counter tuples 重新定义
  • 如何限制Erlang VM(BEAM)使用的核心数量?

    我正在具有 2 个四核 Xeon E5520 2 2GHz 24 0GB RAM 和 Erlang R15B02 启用 SMP 的节点上运行实验 我想知道是否可以限制Erlang VM使用的核心数量 以便我可以暂时禁用一些核心并逐步增加数量
  • 在 digraph_utils:is_acirclic/1 返回 false 后查找循环或循环

    我怎样才能 有效地 在Erlang有向图中找到循环或循环digraph utils is acyclic 1返回假 EDIT is acyclic is 定义为 https github com erlang otp blob maint
  • Erlang 中的接受器池和负载平衡?

    From http www erlang org doc man gen tcp html accept 1 http www erlang org doc man gen tcp html accept 1 值得注意的是 accept 调
  • 你为什么决定“反对”使用 Erlang?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 你是否真的 尝试过 意味着在其中编程 而不仅仅是阅读有关它的文章 Erlang并决定在项目中不
  • Erlang 中的非终止函数类型

    我正在学习 Erlang 并尝试使用 Dialyzer 在可能的情况下获得最大的类型安全性 有一点不太明白 什么是类型非终止的函数以及如何表示它 spec 有人能解释一下吗 永远循环且永不终止的函数具有返回类型no return 该返回类型

随机推荐