Size: a a a

2020 July 22

c

corsars in ErlangRus
Раздел на котором данные ?
источник

c

corsars in ErlangRus
Попробуй в памяти вести обработку
источник

AS

Alex Sherman in ErlangRus
Привет.  За нубовопросы ногами не бьете?
есть gen_server, в котором по init/1 есть timer:send_interval/2

Сейчас я ловлю эти сообщения в handle_info/2, но я не уверен, правильно ли я делаю. Плюс я хочу снаружи из теста это подергать через Pid ! Message, и вот тут, похоже, handle_info/2 точно не срабатывает.
Правильно ли сообщения из таймера ловить по handle_info? Может, унести в handle_cast/2?
источник

V

Vasilii Demidenok in ErlangRus
> Сейчас я ловлю эти сообщения в handle_info/2, но я не уверен, правильно ли я делаю
Да, правильно
> подергать через Pid ! Message, и вот тут, похоже, handle_info/2 точно не срабатывает.
именно он и сработает
> Правильно ли сообщения из таймера ловить по handle_info? Может, унести в handle_cast/2?
для cast потребуется дополнительно генерить обвязку вокруг тела сообщения, чтобы gen_server думал что это именно cast. В остальном handle_cast и handle_info ничем не отличаются.
источник

AS

Alex Sherman in ErlangRus
ага, значит у меня в данных какая-то фигня, раз handle_info странно работает
спасибо
источник

V

Vasilii Demidenok in ErlangRus
> есть gen_server, в котором по init/1 есть timer:send_interval/2
ты уверен что хочешь именно send_interval? не лучше ли дёргать после того как получил сообщение и отработал?

если генерить разово - то timer обычно не используют, берут erlang:send_after/3,4
источник

AK

Aleksey Kluchnikov in ErlangRus
Vasilii Demidenok
> Сейчас я ловлю эти сообщения в handle_info/2, но я не уверен, правильно ли я делаю
Да, правильно
> подергать через Pid ! Message, и вот тут, похоже, handle_info/2 точно не срабатывает.
именно он и сработает
> Правильно ли сообщения из таймера ловить по handle_info? Может, унести в handle_cast/2?
для cast потребуется дополнительно генерить обвязку вокруг тела сообщения, чтобы gen_server думал что это именно cast. В остальном handle_cast и handle_info ничем не отличаются.
обвязки особой не потребуется, просто gen_server:cast(Pid, Msg).
источник

V

Vasilii Demidenok in ErlangRus
Aleksey Kluchnikov
обвязки особой не потребуется, просто gen_server:cast(Pid, Msg).
тебе потребуется вместо например some, слать себе {'$gen_cast',some} зачем это нужно?
источник

AK

Aleksey Kluchnikov in ErlangRus
Vasilii Demidenok
тебе потребуется вместо например some, слать себе {'$gen_cast',some} зачем это нужно?
Да, не вник что из таймера шлется
источник

AS

Alex Sherman in ErlangRus
у меня следующая задача - надо в некотором интервале перегружать CRL-файл с отозванными сертификатами
подумал, что проще всего будет повесить таймер и раз в интервал его цеплять
источник

AK

Aleksey Kluchnikov in ErlangRus
лучше каждый раз новый таймер. Ато что нибудь залипнет и интервалы в очередь встанут
источник

ML

Maksim Lapshin in ErlangRus
Alex Sherman
Привет.  За нубовопросы ногами не бьете?
есть gen_server, в котором по init/1 есть timer:send_interval/2

Сейчас я ловлю эти сообщения в handle_info/2, но я не уверен, правильно ли я делаю. Плюс я хочу снаружи из теста это подергать через Pid ! Message, и вот тут, похоже, handle_info/2 точно не срабатывает.
Правильно ли сообщения из таймера ловить по handle_info? Может, унести в handle_cast/2?
для старта подойдет, но с какого-то момента, если таймер частый, так нельзя

send_interval тебе будет слать невзирая на состояние твоего генсервера и может забить очередь сообщений.

Правильнее обрабатывать таймер в handle_info и взводить его заново через erlang:send_after

Дальше очень полезно сбрасывать таймер при получении, чтобы не слать себе повторно.
источник

AK

Aleksey Kluchnikov in ErlangRus
а потом кааак поломятся
источник

V

Vasilii Demidenok in ErlangRus
если у тебя внезапно задача по перегрузке файла займёт дольше времени чем интервал - ляжешь по очереди
источник

AS

Alex Sherman in ErlangRus
интервал богатый, полчаса-час
думаю, успею
источник

AK

Aleksey Kluchnikov in ErlangRus
полный чат мастеров опреденей :))
источник

V

Vasilii Demidenok in ErlangRus
хорошая практика - так как описал выше Макс, если уверен - сам себе мастер =)
источник

AS

Alex Sherman in ErlangRus
Maksim Lapshin
для старта подойдет, но с какого-то момента, если таймер частый, так нельзя

send_interval тебе будет слать невзирая на состояние твоего генсервера и может забить очередь сообщений.

Правильнее обрабатывать таймер в handle_info и взводить его заново через erlang:send_after

Дальше очень полезно сбрасывать таймер при получении, чтобы не слать себе повторно.
то есть один раз на ините по таймеру, потом в handle_info взять TimerReference и уничтожить таймер, после чего там же erlang:send_after/3 ?
источник

AK

Aleksey Kluchnikov in ErlangRus
он сам как сработает уничтожится
источник

AS

Alex Sherman in ErlangRus
ок, спасибо, попробую
источник