Прежде всего я новичок в Perl и Mojo, так что я сделаю все возможное, с этим ..: DMojolicious REST + IOLoop одновременное обслуживание
Проблема заключается в том, что мне нужно работать параллельно, поэтому этой службе необходимо обрабатывать несколько вызовов каждую секунду. Эта служба позволит другим службам подключаться через REST для загрузки и обработки файлов. Я делаю некоторые тесты по этой идее без успеха.
Я тестировал около Mojo :: IOLoop, но я думаю, что я неправильно понял некоторые понятия о том, что, поскольку каждая реализация с использованием циклов и таймеров идет совершенно неправильно ...
На самом деле мой рабочий процесс идет здесь :
(1) Получить REST вызов
(2) Проверьте URL при условии над MongoDB
(3) Скачать файл associed для этого Монго объекта.
Так на самом деле это работает, но я не могу видеть, как реализовать это для того, чтобы работать параллельно ...
#!/usr/bin/env_perl
use Mojolicious::Lite;
use MongoDB;
my $mongo = MongoDB::MongoClient->new(host => 'xxxx.mongohq.com',port => 'xxxxx', username => 'xxxxx', password => 'xxxxx', db_name => 'xxxxx');
my $database = $mongo->get_database('xxxxx');
my $collection = $database->get_collection('xxxxx');
any [qw/ get post /] => '/:action/:objid' => sub {
my $self = shift;
#Parsing objectid...
my $objectid = $self->param('objid');
my $id = MongoDB::OID->new(value => $objectid);
my $all = $collection->find({_id => $id});
my $dts = $all->next;
download($dts->{parsedoc}->{url},"final_name.xml");
};
app->start;
sub download {
say "Starting new download..";
my $ua = Mojo::UserAgent->new(max_redirects => 5);
my $tx = $ua->get($_[0]);
$tx->res->content->asset->move_to($_[1]);
say "Download ends.";
}
Что является лучшим способом для реализации IOLoop здесь? Я использовал несколько примеров таймера mojo, но, возможно, мне нужно изменить порядок потока приложений? Заранее спасибо.
IOLoop не работает параллельно, но работает без блокировки. Таким образом, вам нужен неблокирующий клиент Mongo. Я знаю, что автор Mojolicious писал письмо под названием Mango, но в настоящий момент он находится в альфа-состоянии. –