Erlang:什么时候执行`inets:start()`?

jld*_*ont 3 erlang inets

什么地方适合表演inets:start()

  1. 在“ applicationname_app”模块中?
  2. applicationname_sup主管模块中?
  3. 在上级挂起的子进程中?\
  4. 还有其他地方吗?

(我仍在努力inets:httpd

注意:答案不能是“使用启动文件”。

Zed*_*Zed 5

inets是一个“独立” Erlang应用程序;inets:start()只是的别名application:start(inets)。我猜答案很大程度上取决于您如何维护代码。

如果您的代码打包为应用程序,则您的.app文件应按inets要求列出,然后在您之前启动(请参阅Applications标签)。application:start(my_app).现在开始使用您的应用程序将确保也启动了inets。结果:如果创建启动文件,它也会为您启动inets :-P

如果您热衷于不使用应用程序,那么我想选择取决于您的代码如何工作。如果您始终需要启动inet,则最好由任何主管启动。如果很少需要它,则可以始终确保它以类似以下内容的开头:

ensure_app_started(App) ->
  case application:started(App) of
    ok -> ok;
    {error, already_started} -> ok;
    Error -> Error
  end.
Run Code Online (Sandbox Code Playgroud)