LINUX.ORG.RU

где в erlang/OTP приложениях принято размещать «активный» код?

 ,


0

1

Вот пишем мы Application, в нем запускаем Supervisor, а он уже запускает рабочие процессы.

В отп есть три вида рабочих процесса - сервер, автомат и обработчик событий.

а у меня, один из рабочих процессов должен, должен быть активным, т.е. не ждать какого-то сообщения\события, а быть инициатором этих сообщений\событий. т.е. раз в пару минут должен выполняться определенный код.

как мне организовать это в рамках erlang/OTP?


Я бы завернул в gen_server и наружу бы выставил синхронные методы для (де)регистрации интресующихся подписчиков событий.

gensym ★★
()
Ответ на: комментарий от gensym

дак подпищиков я изначально знаю. я не понимаю _где_ нужно размещать активный код.

т.е. чтобы после application:start(MyApp). он запустился и работал(раз в пару минут, слал определенные сообщения).

з.ы. при этом в MyApp, есть свой ген_сервер, который принимает сообщения. а мне нужно что-бы в фоне еще один процесс весел.

вот как это по канону реализовать - я и не понимаю.

kyz
() автор топика
Ответ на: комментарий от kyz

дак подпищиков я изначально знаю. я не понимаю _где_ нужно размещать активный код.

Я бы написал свой внутренний loop запущенный spawn_link() (или просто spawn() и обрабатывал бы события в handle_info() - если хочется большего контроля), внутри gen_server.

вот как это по канону реализовать - я и не понимаю.

хз, но вышеописанный способ работает ;-)

gensym ★★
()
Ответ на: комментарий от kyz

А нельзя отработать, подождать пару минут и послать себе сообщение?

anonymous
()
Ответ на: комментарий от dimon555

вот о том, в каком месте его создавать - я и спрашиваю.

под супервайзером как-то можно?

kyz
() автор топика
Ответ на: комментарий от kyz

под супервайзером как-то можно?

Так чем идея использования gen_server не нравится? Ну не будет у тебя внешних методов, зато все будет готово для интеграции с supervisor.

Либо можно создать свой activity behavior который будет следовать протоколу supervisor'а.

gensym ★★
()

Можно узнать, что за приложение вы пишете? А то мне видится эрланг, только как клей между модулями написанными на С.

anonymous
()
Ответ на: комментарий от anonymous

proc_lib:start_link

Точно, то что нужно ТС'у. Спасибо, не знал.

«This module (proc_lib) is used to start processes adhering to the OTP Design Principles. Specifically, the functions in this module are used by the OTP standard behaviors (gen_server, gen_fsm, ...) when starting new processes. The functions can also be used to start special processes, user defined processes which comply to the OTP design principles.»

gensym ★★
()
Ответ на: комментарий от anonymous

«еще одну децентрализованную сеть»

з.ы. не в практических целях, а в целях диплома.

kyz
() автор топика
Ответ на: комментарий от kyz

Народ требует подробностей. Используете ли только голый эрланг или он работает как клей между модулями на С?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.