Firstly I am new to Mojolicious so if what I am asking is stupid please 
forgive me.

I am writing a web restful api connection to a asterisk based dialer. I 
want each client to have a unique socket connection to the asterisk AMI 
(actually to a asterisk AMI proxy but it behaves exactly like asterisk AMI) 
The app shouldn't block as requests can take up to 20-30 seconds to send 
back a response and multiple clients will be making requests at any one 
time.

To create unique sockets I am using $self->session('id') to set cookie 
session id on the client browser. The api will be called via a jquery ajax 
call.

So I am doing something like this ...

get '/dial' => sub {

        my $s = shift;
        $s->render_later;
        $s->render(json => {Response => "Error",Message => "No telnum"}) if 
!defined $s->param('telnum');
        $s->render(json => {Response => "Error",Message => "No agentid"}) 
if !defined $s->param('agentid');

        my %cmd=();
        $cmd{Action} = 'Dial';
        $cmd{Telnum} = $s->param('telnum');
        $cmd{AgentID} = $s->param('agentid');
        my %response = $sockets{$s->session('id')}->sendcommand(%cmd);
        $s->render(json => {Response => $response{Response},Message => 
$response{Message},SessionID => $s->session('id')});

};

Where  "sendcommand(%cmd);" sends a command using Asterisk::Manager to 
asterisk proxy which will dial a phone number. If this call is a noanswer 
it will take 20 seconds to return a response.

(If I use the cpan module Asterisk::AMI I get the following error when 
using morbo "AnyEvent::CondVar: recursive blocking wait attempted at 
/home/dharper/perl5/perlbrew/perls/perl-5.20.2/lib/site_perl/5.20.2/Asterisk/AMI.pm
 
line 1131." ? )

It sort of all works expect my issue is that morbo is blocking so I can 
only make one request at a time otherwise they get queued up. I have tried 
hypnotoad and that works well but only has 5 workers by default. (this app 
will have 100-200 clients connecting at any one time)

I was wondering if someone knows the best way to do this so so I can have 
multiple clients sending multiple (slow 20-30 second) requests via a 
socket. Perhaps I should be using IO::Socket or some-other direct socket 
module? or I should just up the hypnotoad workers to 200 and be done with 
it?

Any help would be much appreciated.

Thanks,

Daniel





-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to