<div dir="ltr">I've had no experience of Dancer2's async yet (apart from dancing along at Sawyer's async web-scraping performance at YAPC::EU last month:) so I'll tell you the naive approach I've taken.<div><br></div><div>* send the job off to the queue and respond immediately with a 'waiting page'</div><div>* the 'waiting page' has this bit of jQuery which is checking with the server if the job is complete</div><div><br></div><div><br></div><div><div>  function startRefresh() {</div><div>    setTimeout(startRefresh,5000); // remember Javascript isn't waiting for this before continuing...</div><div>    jQuery.post('/json-get-job-status', {},</div><div>      function(data) {</div><div>        if (data.job_status != 'done') {</div><div>          window.location = '<a href="http://example.com/job_done">http://example.com/job_done</a>',</div><div>        }</div><div>      }</div><div>    );</div><div>  };</div><div>  window.onload = function () {</div><div>    startRefresh();</div><div>  };</div></div><div><br></div><div>NOTE: <a href="http://mybox/json-get-job-status">http://mybox/json-get-job-status</a> is being called by the browser without reloading the page<br></div><div><br></div><div>Does that address your question, or am I completely off on a tangent?</div><div><br></div><div>Andrew</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 6, 2015 at 8:54 PM, Amelia Ireland <span dir="ltr"><<a href="mailto:aireland@lbl.gov" target="_blank">aireland@lbl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello again,<div><br></div><div>What are my options for running a potentially lengthy process using Dancer? I'm adapting old CGI.pm-based code, which uses one of two techniques:</div><div><br></div><div>1. the CGI creates a job that it sends to an externally-managed queue; users have a workspace area where they can check to see if their job has finished;</div><div><br></div><div>2. the CGI keeps the connection to the browser open while performing the process using a hack involving sending small chunks of data from time to time.</div><div><br></div><div>Another common technique (similar to 1 above) is to fork off a child process and have the browser periodically refresh the page, which triggers a check to see if the child process has finished (e.g. by checking for the presence of a results file) and the results can be loaded.</div><div><br></div><div>Do Dancer2's delayed / async / non-blocking capabilities offer any additional ways to deal with long-running processes, or maybe a more elegant way to do option 2?</div><div><br></div><div>Thank you for any information!</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Amelia.</div><div><br></div></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On 2 October 2015 at 10:50, Amelia Ireland <span dir="ltr"><<a href="mailto:aireland@lbl.gov" target="_blank">aireland@lbl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello,<div><br></div><div>I'm very interested in using Dancer2's streaming and async capabilities, and have a number of questions about using Dancer2 asynchronously:</div><div><br></div><div>- Does the whole app have to be written to be asynchronous / non-blocking? (I assume so)</div><div><br></div><div>- Do all apps running from the same .psgi file have to be non-blocking? E.g. in app.psgi:</div><div><br></div><div>builder {</div><div>   mount '/app1' => $nonblocking_app;</div><div>   mount '/app2' => $blocking_app;</div><div>};</div><div><br></div><div>- Are hooks safe to use in a non-blocking Dancer2 app or do they introduce a blocking element?</div><div><br></div><div>- When I run the drums example in a browser (Safari), it waits until the entire drum loop has completed and then prints the content. Is that what is expected to happen? I expected the content to be written by the browser as it received it. The docs aren't very clear on what Dancer is actually doing under the hood -- it would be useful to have more explanation of what's going on. I'd be happy to write up something myself, but I don't know what's going on. ;-)</div><div><br></div><div>Thanks!</div><span><font color="#888888"><div><br></div><div>Amelia.</div><div><br></div><div><br></div></font></span></div>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
dancer-users mailing list<br>
<a href="mailto:dancer-users@dancer.pm">dancer-users@dancer.pm</a><br>
<a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" rel="noreferrer" target="_blank">http://lists.preshweb.co.uk/mailman/listinfo/dancer-users</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Andrew Solomon<div><br></div><div>Mentor@Geekuni <a href="http://geekuni.com/" target="_blank">http://geekuni.com/</a></div><div><a href="http://www.linkedin.com/in/asolomon" target="_blank">http://www.linkedin.com/in/asolomon</a><br></div></div></div>
</div>