我有一个erlang项目,其状态完全是只读的,由ets表和compiled module组成。代码启动时构建表需要几秒钟。
打包它的最佳方法是什么,以便其他应用程序可以使用它?
还需要考虑其他一些事项:
application:start/1
并让事情“正常”。上面让我认为我应该创建一个应用程序,并从主管的init/1
函数中调用设置代码,但我不确定这是否是一种愚蠢的方法来接近它。
答案 0 :(得分:5)
如果模块完全是静态的,那么在这样的应用程序中不需要任何进程。如果在OTP中实现application
行为,您应该能够将ETS表直接连接到主应用程序进程(启动应用程序start/2
回调中的表)。这样,您将拥有最小的流程模型,允许您跳过supervisor
和任何gen_server
。
你当然应该使用OTP,但这并不意味着你绝对必须拥有supervisor
或gen_server
。
使用appmon
查看应用程序的流程层次结构。
答案 1 :(得分:2)
将其作为标准OTP应用程序包装。 gen_server
不是关于维护状态,而是关于拥有一个可以处理请求的服务器(由于某种原因,它不被称为gen_state
))。创建一个OTP应用程序,让人们以与其他任何人相同的方式使用它。