我有一个用 Erlang 制作的服务器应用程序。在里面我有一个内存表
存储照片上的一些信息。本着“一切都是
过程”我决定将该表包装在 gen_server
模块中,以便gen_server
模块是唯一直接访问表的模块。查询
并向该表添加信息是通过向该进程发送消息来完成的
(具有注册名称)。这个想法是会有几个客户
处理从该表查询信息。
这工作得很好,但是 gen_server
模块没有状态。一切它
requires 存储在 mnesia 表中。所以,我想知道 gen_server
也许是
不是封装该表的最佳模型?
我是否应该不让它成为一个过程,而只是封装表格
通过该模块中的功能?如果该模块中出现错误,则
会导致调用进程崩溃,我认为这可能会更好,因为
它只会影响单个客户,而不是现在,当它会导致gen_server
进程崩溃,让每个人都无法访问表(直到
主管重新启动它)。
非常感谢任何输入。
最佳答案
我猜根据 Occam's razor有不需要这个gen_server
存在 , 特别是因为绝对有 无状态存储在其中。当您需要访问表(或任何其他资源)为 时,可能需要这样的过程。严格顺序 (例如,您可能希望以瓶颈为代价避免任何中止的事务)。
将对表的访问封装在 中模块是一个很好的解决方案 .它创建 没有额外的复杂性 ,同时提供适当的抽象和封装级别。
关于erlang - 使用 gen_server 封装一个 mnesia 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1437468/