ekfa/src/efka_app.erl
2026-04-20 10:41:40 +08:00

58 lines
1.6 KiB
Erlang

%%%-------------------------------------------------------------------
%% @doc efka public API
%% @end
%%%-------------------------------------------------------------------
-module(efka_app).
-behaviour(application).
-export([start/2, stop/1]).
start(_StartType, _StartArgs) ->
io:setopts([{encoding, unicode}]),
ensure_upload_dir(),
%% 加速内存的回收
erlang:system_flag(fullsweep_after, 16),
start_http_server(),
efka_sup:start_link().
stop(_State) ->
ok.
%% 微服务和efka之间通过websocket协议通讯
start_http_server() ->
{ok, Props} = application:get_env(efka, http_server),
Acceptors = proplists:get_value(acceptors, Props, 50),
MaxConnections = proplists:get_value(max_connections, Props, 10240),
Backlog = proplists:get_value(backlog, Props, 1024),
Port = proplists:get_value(port, Props),
Dispatcher = cowboy_router:compile([
{'_', [
{"/ws", ws_channel, []},
{"/files/[...]", cowboy_static, {dir, "/usr/local/code/downloads"}},
{"/upload", upload_channel, []}
]}
]),
TransOpts = [
{port, Port},
{num_acceptors, Acceptors},
{backlog, Backlog},
{max_connections, MaxConnections}
],
{ok, Pid} = cowboy:start_clear(ws_listener, TransOpts, #{env => #{dispatch => Dispatcher}}),
logger:debug("[efka_app] websocket server start at: ~p, pid is: ~p", [Port, Pid]).
ensure_upload_dir() ->
{ok, UploadDir} = application:get_env(efka, upload_dir),
case filelib:is_dir(UploadDir) of
true ->
ok;
false ->
ok = file:make_dir(UploadDir)
end.