рд╕рдордп-рд╕рдордп рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛

рдПрд░рд╛рдВрдЧ рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред

рдЖрдЗрдП, рд╣рдо рджреВрд╕рд░реА рдмрд╛рд░ рдПрдХ рдмрд╛рд░ рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HTTP url рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ред рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХреА, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡рд╣ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдХреБрдЫ рдХрд░реЗред

рддреАрди рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ erlang рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ: рдЯрд╛рдЗрдорд░: send_interval, рдЯрд╛рдЗрдорд░: send_after, рдФрд░ erlang: send_afterред

рдкрд╣рд▓реЗ рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ send_interval рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЯрд╛рдЗрдорд░: send_interval рдЗрд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рдирд╛ рдЬрд╛рдБрдЪ рдХрд┐рдП рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирддреАрдЬрддрди, рдпрджрд┐ рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЫрдбрд╝реА рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд╡рд▓ рдЗрд╕ рдХрд╛рд░реНрдп рд╕реЗ рдирд┐рдкрдЯрддреА рд╣реИред рдПрдХ рдмреБрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рд╕рдВрдЪрдп рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкреВрд░реНрдг рдиреБрдХрд╕рд╛рдиред

рдореИрдВрдиреЗ рдмрд╛рд░-рдмрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ message_queue рдореЗрдВ рдХрдИ рд╕реМ рдЪреЗрдХ рд╕рдВрджреЗрд╢ рджреЗрдЦреЗ рд╣реИрдВред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдмрд▓рд╛рддреНрдХрд╛рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ: рдПрдХ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдпрд╛ рдПрдХ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдПрдХ рдмреНрд░реЗрдХ рд▓реЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╕рд╣реА рдХрджрдо рдХрд╛рд░реНрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдВрдд рдореЗрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рдВрджреЗрд╢ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред

рдЯрд╛рдЗрдорд░ рдХреЗ рдмреАрдЪ: send_after рдФрд░ erlang: send_after, рдкрд╕рдВрдж рд╕реНрдкрд╖реНрдЯ рд╣реИ: erlang: send_afterред рдЯрд╛рдЗрдорд░ рдореЙрдбреНрдпреВрд▓ рдпрд╣ рдХрд╛рдлреА рдЧреИрд░-рдЖрд╢рд╛рд╡рд╛рджреА рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдИ рдЯрд╛рдЗрдорд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред

Erlang рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг: send_after рд╣реИ рдЬрдм рдХрдИ рд╣рдЬрд╛рд░реЛрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ рдФрд░ рдЖрдк рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдореВрд╣рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрддреНрдпрдВрдд рджреБрд░реНрд▓рдн рд╕реНрдерд┐рддрд┐ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣рд╛рдБ рдПрдХ рдЧрд▓рддреА рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:

init([]) -> self() ! check, {ok, state}. handle_info(check, State) -> do_job(State), erlang:send_after(1000, self(), check), {noreply, State}. 


рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЪреЗрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдпрд╣ рдПрдХ рджреВрд╕рд░реА рд▓рд╣рд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрдХ рд╕рдВрджреЗрд╢ рдПрдХ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдкреБрдирдГ рдЯрд╛рдЗрдорд░ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рдирддреАрдЬрддрди, рдпрджрд┐ рдЖрдк 20 рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╕рдордп рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 20 рдЯрд╛рдЗрдорд░ рд╣реЛрдВрдЧреЗ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдореА рдирд╣реАрдВ рд╣реЛрдЧреАред

рд╕рд╣реА рдЙрддреНрддрд░ рд╣реИ:
 init([]) -> Timer = erlang:send_after(1, self(), check), {ok, Timer}. handle_info(check, OldTimer) -> erlang:cancel_timer(OldTimer), do_task(), Timer = erlang:send_after(1000, self(), check), {noreply, Timer}. 

рдЯрд╛рдЗрдорд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдиреЗ рд╕реЗ рддрдереНрдп рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк 1000 рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╕рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд▓реНрджреА рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧреА рдФрд░ рд╕рдВрджреЗрд╢ рдЕрдЧреНрд░реЗрд╖рдг рдХреА рдХреЗрд╡рд▓ рдПрдХ рд▓рд╣рд░ рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In155173/


All Articles