保持https客户端在erlang网络机器服务器应用程序中运行的好方法是什么



在一个网络机器项目中,我还从其他服务器请求https页面。

在原型中,我设法做到了这一点:

to_html(ReqData, State) ->
    OtherResource = "https://example.com",
    inets:start(),
    ssl:start(),
    {ok, {{Version, 200, ReasonPhrase}, Headers, Body}} =
      httpc:request(get, {OtherResource, []}, [], []), 
    %% building the HTML response here...
    {HTML, ReqData, State}.

它作为一个原型工作,现在我想知道如何以及在哪里启动inets和ssl,并保持它们以正确的方式运行。

我看到src/myapp.erl中也有启动的inets,但这个inets实例在我上面的页面渲染中不可用:

start() ->
    ensure_started(inets), 

您可以将inets和ssl应用程序作为标准启动脚本的一部分启动(或者您正在使用的任何东西,因为您可能会使用reltool)。此外,如果您在请求期间需要一些状态(来自网络机器的状态),作为init/1函数的一部分,你可以启动任何你想要的东西(如果你想在请求结束时停止它,你可以调用finish_request/2中的任何停止过程——"如果导出了这个函数,它会在构建和发送最终响应之前被调用。Result被忽略,所以这个函数的任何效果都必须通过返回修改后的ReqData来实现。"):

以下是reltool.config:中的一个片段

{sys, [
       {lib_dirs, []},
       {erts, [{mod_cond, derived}, {app_file, strip}]},
       {app_file, strip},
       {rel, "myapp", "1",
        [
         kernel,
         stdlib,
         sasl,
         myapp
        ]},
       {rel, "start_clean", "",
        [
         kernel,
         stdlib
        ]},
       {boot_rel, "myapp"},
       {profile, embedded},
       {incl_cond, exclude},
       {excl_archive_filters, [".*"]}, %% Do not archive built libs
       {excl_sys_filters, ["^bin/.*", "^erts.*/bin/(dialyzer|typer)",
                           "^erts.*/(doc|info|include|lib|man|src)"]},
       {excl_app_filters, [".gitignore"]},
       {app, sasl,   [{incl_cond, include}]},
       {app, stdlib, [{incl_cond, include}]},
       {app, kernel, [{incl_cond, include}]},
       {app, mnesia, [{incl_cond, include}]},
       {app, inets, [{incl_cond, include}]}
      ]}.

您可以为ssl添加另一个条目,与inets({app,inets,〔{incl_cd,include}〕})相同。通常,可以使用钢筋生成所需的所有骨架文件。

相关内容

  • 没有找到相关文章

最新更新