[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
running.
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 =
$MongoDBConnection->get_collection('Patients')->find;
while ( my $MongoReturnObject = $MongoReturnData->next ) {
my $IDObj = $MongoReturnObject->{'_id'};
my $IDString = $IDObj->to_string;
print "ID string is $IDString\n";
$Data{$IDString}++;
}
}
template 'index';
};
true;
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.
David
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