Size: a a a

2020 June 29

DM

Dmitriy Momotyuk in Modern::Perl
Andrey Konovalov
А где бы пример асинк-приложения uWSGI глянуть?
ну примерно вот так наковырял

use Coro::AnyEvent;
use AnyEvent;
use Promises qw(deferred);

sub handle {
   my ($self, $env) = @_;

   return deferred->resolve([200, ['content-type' => 'application/json; charset=UTF-8'], ['{"status":"ok"}']])->promise;
}

sub app {
   my $self = shift;
   return sub {
       my $env = shift;
       my $promise = $self->handle($env);
       return [500, ['content-type' => 'text/plain'], ['internal server error']]
           unless blessed $promise && $promise->isa('Promises::Promise');
       my $cv = AnyEvent->condvar;
       $promise->done(
           sub { $cv->send($_[0]) },
           sub { $cv->send($_[0]) },
       );
       return $cv->recv;
   }
}
источник

DM

Dmitriy Momotyuk in Modern::Perl
ну и в startup.psgi че-то типа
use MyApp;
return MyApp->new(%config)->app;
источник

AP

Anton Petrusevich in Modern::Perl
Dmitriy Momotyuk
ну и в startup.psgi че-то типа
use MyApp;
return MyApp->new(%config)->app;
я, обычно, каждый хендлер в своём асинке запускаю
источник

AP

Anton Petrusevich in Modern::Perl
но сходу не помню, может быть это уже так в ювсги
источник

AP

Anton Petrusevich in Modern::Perl
что-то вылетело из головы как я делал...
источник

DM

Dmitriy Momotyuk in Modern::Perl
что есть "каждый хендлер"?
источник

AP

Anton Petrusevich in Modern::Perl
ща я попробую свой код зачитать... :)
источник

AP

Anton Petrusevich in Modern::Perl
кажись я изза вебсокета так делал:
  async {
   setup_websocket($websocket);
 };
 cede;
 return [];
источник

DM

Dmitriy Momotyuk in Modern::Perl
ну с сокетами вообще по другому всё работает
источник

DM

Dmitriy Momotyuk in Modern::Perl
с увсги один один запрос = один воркер = один хендлер
источник

DM

Dmitriy Momotyuk in Modern::Perl
и мастер воркер, который разбрасывает
источник

AP

Anton Petrusevich in Modern::Perl
короче, обычный короае запускает каждый хендлер в своём асинке, но если тебе нужен вебсокет, то нужна смена протокола
источник

AP

Anton Petrusevich in Modern::Perl
и вот таким вот кодом я запускал смену протокола, с запуском "параллельного" асинка, завершая обычный хендлер пустым массивом
источник

AP

Anton Petrusevich in Modern::Perl
то есть, для запуска вебсокета, псги-сервер должен сказать браузеру "меняем протокол", для этого надо выдать браузеру HTTP/1.1 101 Switching Protocols, чтобы это сделать, надо завершить запущенный ювсги хендлер
источник

AP

Anton Petrusevich in Modern::Perl
ну или пользоваться теми модулями вебсокета, что предоставляет сам ювсги
источник

AP

Anton Petrusevich in Modern::Perl
у меня свои были
источник

DM

Dmitriy Momotyuk in Modern::Perl
аа, понял
источник

AP

Anton Petrusevich in Modern::Perl
Andrey Konovalov
А где бы пример асинк-приложения uWSGI глянуть?
тебе потрахаться или чтобы работало?
источник

AP

Anton Petrusevich in Modern::Perl
если вебсокеты не нужны, то я не совсем понимаю нахрена коро/ае в веб-приложении :)
источник

DM

Dmitriy Momotyuk in Modern::Perl
ну там смысл не столько в конкретно коро/ае сколько в асинхронности и распараллеливании
источник