[dancer-users] Non-blocking stuff

David H untg99 at gmail.com
Tue Jan 12 23:52:34 GMT 2016

On Wed, Jan 13, 2016 at 4:49 AM, Sawyer X <xsawyerx at gmail.com> wrote:

> Could you provide some sample code so I could play with it?
> Also, how are you implementing the delayed server? What event loop are you
> using? Are you trying to do fully non-blocking asynchronous or are you just
> having a delayed response? There is a big difference.
> The problem with delayed responses is that there are several options and
> in between them you need to understand how they work, what they do, event
> loop, the effect *on* your code, the effect *of* your code etc. That's why
> it's a pretty advanced feature that is usually unnecessary and the usage of
> it should probably be very well contained.
So, after writing  basic test app, then retesting my own code, it appears
the issue I was having is resolved.
For the record, my test app is below, which I've tested with --workers 1
and --workers 3 and --workers 1 will block, whereas --workers 3 works with
3 children.

The method I use is to go to http://servername:5001/
Then in another tab, go to http://servername:5001/PlainRoute while / is
Now, for some reason, the whole thing works and it will just server up
/PlainRoute even if / is still going on doing its stuff.
It may be that in some of my routes, there is some code that blocks
starman, I don't know, so I will keep an eye on this and if I find a
situation I willgo from there.

This is my test app and startup command:

plackup -s Starman -p 5001  ./bin/app.psgi

This is the basic code, connecting to MongoDB and doing some stuff:

package TestApp;
use Dancer2;
use MongoDB;

our $VERSION = '0.1';

sub connect_MongoDB_referral_db {
    my $database;
    my $client = MongoDB::MongoClient->new(
    host => 'mongodb://user:pass@localhost/ICSIntakeReferralsDev',
    auto_connect  => 1,
    query_timeout => -1,
    $database = $client->get_database('ICSIntakeReferralsDev');
    return $database;

get '/PlainRoute' => sub {

    template 'index';


get '/' => sub {
   my %Data;
   for (1..100) {
      my $MongoDBConnection = connect_MongoDB_referral_db();
      my $MongoReturnData =
      while ( my $MongoReturnObject = $MongoReturnData->next ) {
         my $IDObj = $MongoReturnObject->{'_id'};
         my $IDString = $IDObj->to_string;
         print "ID string is $IDString\n";

    template 'index';


This is the pretty picture version:

[image: Inline image 1]

So, as mentioned, it appears that it is all working now but I'll keep
monitoring closely.

Thanks for all your help everyone.


On Fri, Jan 8, 2016 at 5:55 PM, Andrew Beverley <andy at andybev.com> wrote:
>> On Sat, 2016-01-09 at 00:09 +1030, David H wrote:
>> > I'm not sure if there is a way (or if this even makes sense) to fork
>> > out each request so the dancer site isn't just sitting there waiting
>> > for the last thing to complete.
>> Really stupid question, but I assume you do have Starman configured for
>> multiple processes accepting requests on the server-side? Otherwise you
>> would of course see the behaviour you describe.
>> > I tried using the Delayed responses (Async/Streaming) listed here:
>> I would expect that. Delayed is still single-threaded (?), it just
>> allows responses to be sent part way through processing request (I
>> think, I've not looked at it in detail).
>> I certainly would have thought that Starman or other multi-threaded
>> server is the way to go.
>> I do have some resource-intensive processes in one of my apps (that
>> produce data for the same webpage via a separate request), and I've
>> never noticed a problem. I've never looked at it in detail though. I'm
>> using fast-cgi in Apache.
>> Andy
>> _______________________________________________
>> dancer-users mailing list
>> dancer-users at dancer.pm
>> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
> _______________________________________________
> dancer-users mailing list
> dancer-users at dancer.pm
> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.preshweb.co.uk/pipermail/dancer-users/attachments/20160113/29edb733/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 15649 bytes
Desc: not available
URL: <http://lists.preshweb.co.uk/pipermail/dancer-users/attachments/20160113/29edb733/attachment.png>

More information about the dancer-users mailing list