Дизайн приложения OTP на Erlang

Я с трудом пытаюсь разобраться в модели разработки OTP, поскольку я конвертирую некоторый код в приложение OTP.

По сути, я делаю поисковый робот и просто не Я совершенно не знаю, где разместить код, который выполняет фактическую работу.

У меня есть супервизор, который запускает моего рабочего:

-behaviour(supervisor).
-define(CHILD(I, Type), {I, {I, start_link, []}, permanent, 5000, Type, [I]}).

init(_Args) ->          
  Children = [
    ?CHILD(crawler, worker)
  ],  
  RestartStrategy = {one_for_one, 0, 1},
  {ok, {RestartStrategy, Children}}.

В этом дизайне Crawler Worker отвечает за выполнение фактической работы:

-behaviour(gen_server).

start_link() ->
  gen_server:start_link(?MODULE, [], []).

init([]) ->
  inets:start(),        
  httpc:set_options([{verbose_mode,true}]), 
  % gen_server:cast(?MODULE, crawl),
  % ok = do_crawl(),
  {ok, #state{}}.

do_crawl() ->
  % crawl!
  ok.

handle_cast(crawl}, State) -> 
  ok = do_crawl(),
  {noreply, State};

do_crawl порождает довольно большое количество процессов и запросов, которые обрабатывают работу сканирования через http.

Вопрос, в конечном счете, таков: где собственно сканирование должно происходить? Как видно выше, я экспериментировал с различными способами запуска реальной работы, но все еще упускал некоторую концепцию, необходимую для определения того, как все сочетается друг с другом.

Примечание: часть сантехники OTP опущена для краткости - вся сантехника есть, и вся система висит вместе

8
задан Toby Hede 11 March 2011 в 22:02
поделиться