[erlang-questions] how to reply message using erlang timer module
Palanikumar Gopalakrishnan
palani@REDACTED
Sat Sep 23 14:34:07 CEST 2017
Hi Guys,
I tried with* timer:send_interval/2 *, and *timer:send
_interval/3 *also . see my trial and error result . Both them returns
17:54:47.250 [error] CRASH REPORT Process <0.575.0> with 0 neighbours
crashed with reason: call to undefined function timer:sent_interval(1000,
<<"Time announcement from erlang server">>)
17:54:47.250 [error] Ranch listener my_cowboy_ws_server terminated with
reason: call to undefined function timer:sent_interval(1000, <<"Time
announcement from erlang server">>)
17:59:06.678 [error] CRASH REPORT Process <0.570.0> with 0 neighbours
crashed with reason: call to undefined function timer:sent_interval(1000,
<0.570.0>, "Time announcement from erlang server")
17:59:06.678 [error] Ranch listener my_cowboy_ws_server terminated with
reason: call to undefined function timer:sent_interval(1000, <0.570.0>,
"Time announcement from erlang server")
On 23 September 2017 at 17:00, Igor Clark <igor.clark@REDACTED> wrote:
> Hi again Palanikumar, check the error message - you're still calling
> timer:apply_interval instead of timer:send_interval, except now you're only
> passing 2 arguments:
>
> *call to undefined function timer:apply_interval(1000, "Time announcement
> from erlang server")*
>
> Be careful to check the signatures of the functions you're calling and the
> argument lists you're providing. This is just basic error checking ;-)
>
> NB, please hit "reply to all" in future rather than just "reply", as
> you'll include the mailing list, and other people will be able to help too.
>
> Cheers
> i
>
> On 23/09/2017 12:07, Palanikumar Gopalakrishnan wrote:
>
> Hi lgor,
>
> I tried with
> *timer:send_interval/2 with this line >>> timer:apply_interval(1000,
> "Time announcement from erlang server"),*
>
> returns the following error
>
>
>
>
>
> *16:33:20.264 [error] CRASH REPORT Process <0.570.0> with 0 neighbours
> crashed with reason: call to undefined function timer:apply_interval(1000,
> "Time announcement from erlang server") 16:33:20.265 [error] Ranch listener
> my_cowboy_ws_server terminated with reason: call to undefined function
> timer:apply_interval(1000, "Time announcement from erlang server") *
> same as *timer:send_interval/3 *throw the error
>
> On 23 September 2017 at 16:24, Igor Clark <igor.clark@REDACTED> wrote:
>
>> You could try timer:send_interval/3
>> <http://erlang.org/doc/man/timer.html#send_interval-3>:
>>
>> send_interval(Time, Pid, Message)
>> Evaluates Pid ! Message repeatedly after Time milliseconds. (Pid can
>> also be an atom of a registered name.)
>>
>>
>> There's even a timer:send_interval/2
>> <http://erlang.org/doc/man/timer.html#send_interval-2> that assumes
>> self() as the Pid, which looks like it might be what you want:
>>
>> send_interval(Time, Message)
>> Same as send_interval(Time, self(), Message).
>>
>>
>> One thing to note though is that the Common Caveats
>> <http://erlang.org/doc/efficiency_guide/commoncaveats.html#id60818>
>> section says:
>>
>> Creating timers using erlang:send_after/3
>> <http://erlang.org/doc/man/erlang.html#erlang:send_after-3> and
>> erlang:start_timer/3
>> <http://erlang.org/doc/man/erlang.html#erlang:start_timer-3> , is much
>> more efficient than using the timers provided by the timer
>> <http://erlang.org/doc/man/timer.html> module in STDLIB. The timermodule
>> uses a separate process to manage the timers. That process can easily
>> become overloaded if many processes create and cancel timers frequently
>> (especially when using the SMP emulator).
>>
>>
>> I'm not sure if that applies to send_interval/{2,3} as well, or quite how
>> many "many" means there - I guess it's probably "a really large number",
>> but perhaps somebody could jump in here?
>>
>> But if so, and if you expect heavy traffic with an interval like this on
>> every WS connection, an alternative might be to create a loop to send the
>> message using send_after/3 instead of using the timer module. I.e. the
>> process which handles Msg could call erlang:send_after( Time, self(),
>> Msg ) when it's done its other work. Working out which process does that
>> would depend on your app design - it might work to just do it in the
>> process which handles the message you're sending, or you might need another
>> process.
>>
>> Cheers
>> i
>>
>>
>>
>> On 23/09/2017 11:21, Palanikumar Gopalakrishnan wrote:
>>
>> Hi lgor Clark,
>> Thanks for the help. yes you are correct. Its
>> there any way to send message to websocket using *timer:apply_interval/4*.
>> I didn't find any examples.
>>
>>
>>
>>
>> On 23 September 2017 at 15:47, Igor Clark <igor.clark@REDACTED> wrote:
>>
>>> Hi Palanikumar,
>>>
>>> It looks like you're passing the erlang:start_timer/3
>>> <http://erlang.org/doc/man/erlang.html#start_timer-3> arguments to
>>> timer:apply_interval/4
>>> <http://erlang.org/doc/man/timer.html#apply_interval-4>:
>>>
>>> erlang:start_timer(Time, Dest, Msg)
>>>
>>> vs
>>>
>>> apply_interval(Time, Module, Function, Arguments)
>>>
>>> erlang:start_timer/3 sends Msg to Dest after Time ms;
>>> timer:apply_interval/4 calls Module:Function(Arguments) every Time ms.
>>>
>>> So the error message is telling you that the function
>>> timer:apply_interval/3 you're trying to call doesn't exist.
>>>
>>> HTH,
>>> Igor
>>>
>>>
>>> On 23/09/2017 10:50, Palanikumar Gopalakrishnan wrote:
>>>
>>> Hi Guys,
>>>
>>> I want to send message to the front-end via websocket in
>>> particular time interval.
>>> So i use timer module for this purpose.
>>> *timer:apply_interval(1000, self(), <<"How' you doin'?">>),*
>>>
>>>
>>> But it returns the following error
>>>
>>>
>>>
>>>
>>>
>>> *15:18:20.558 [error] CRASH REPORT Process <0.570.0> with 0 neighbours
>>> crashed with reason: call to undefined function timer:apply_interval(6000,
>>> <0.570.0>, <<"How' you doin'?">>) 15:18:20.558 [error] Ranch listener
>>> my_cowboy_ws_server terminated with reason: call to undefined function
>>> timer:apply_interval(6000, <0.570.0>, <<"How' you doin'?">>) *
>>> Its there any way to solve this problem.
>>>
>>> I already tried with
>>>
>>>
>>>
>>> *erlang:start_timer(60000, self(), <<"How' you doin'?">>) *
>>> Its only send message after particular timer. I didn't found method in
>>> this module to send message in particular interval.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> --
>>>
>>> *Warm Regards,*
>>>
>>> *Palanikumar Gopalakrishnan *[image: ✌]
>>> *Developer*
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> erlang-questions mailing listerlang-questions@REDACTED://erlang.org/mailman/listinfo/erlang-questions
>>>
>>>
>>>
>>
>>
>> --
>>
>> *Warm Regards,*
>>
>> *Palanikumar Gopalakrishnan *[image: ✌]
>> *Developer*
>>
>>
>>
>>
>
>
> --
>
> *Warm Regards,*
>
> *Palanikumar Gopalakrishnan *[image: ✌]
> *Developer*
>
>
>
>
--
*Warm Regards,*
*Palanikumar Gopalakrishnan *[image: ✌]
*Developer*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20170923/02ac350d/attachment.htm>
More information about the erlang-questions
mailing list