[erlang-questions] how to reply message using erlang timer module

Igor Clark igor.clark@REDACTED
Sat Sep 23 15:39:55 CEST 2017


Hi Palanikumar, looks like you've got a typo there, it's send_interval not sent_interval:

> call to undefined function timer:sent_interval(1000, <<"Time announcement from erlang server">>) 


> On 23 Sep 2017, at 13:34, Palanikumar Gopalakrishnan <palani@REDACTED> wrote:
> 
> 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:
>>>> 
>>>>> 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 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 section says:
>>>> 
>>>>> Creating timers using erlang:send_after/3 and erlang:start_timer/3 , is much more efficient than using the timers provided by the timer 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 arguments to timer: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 
>>>>>>> Developer
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> _______________________________________________
>>>>>>> erlang-questions mailing list
>>>>>>> erlang-questions@REDACTED
>>>>>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>> 
>>>>> Warm Regards,
>>>>> 
>>>>> Palanikumar Gopalakrishnan 
>>>>> Developer
>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> 
>>> Warm Regards,
>>> 
>>> Palanikumar Gopalakrishnan 
>>> Developer
>>> 
>>> 
>> 
> 
> 
> 
> -- 
> 
> Warm Regards,
> 
> Palanikumar Gopalakrishnan 
> Developer
> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20170923/2864cc51/attachment.htm>


More information about the erlang-questions mailing list