5

次のような簡単な Mojolicious サーバーをセットアップします。

use Mojolicious::Lite;

get '/' => sub {
    my $self = shift;

    sleep 5; #sleep here, I'm testing multiple connections at once

    $self->render_text('Hello World!');
};

app->start;

次に、次のように開始します。perl Mojolicious.pl daemon --listen=https://127.0.0.1:3000

問題は、このコマンドを同時に実行した場合です。

time curl https://127.0.0.1:3000/ -k

一度に複数のリクエストを行うと、5 秒よりもはるかに長くかかる可能性があるため、リクエストに 1 つのスレッドしか使用していないようです。まるで全員が並んでいるかのようです。

ここで何か不足していますか?Mojolicous を使用したいのですが、一度に複数のクライアントを処理できる場合に限ります。

4

4 に答える 4

9

mojodaemonは、本番用ではなく開発用のスタンドアロン HTTP サーバーであり、単一のスレッドのみを実行します。本番環境では、このfastcgiオプションと FastCGI をサポートする Web サーバーを使用するか、 StarmanStarletPlack::Handler::FCGIFastpassなどのPSGI互換のサーバーをインストールしてから実行することをお勧めします。

plackup -s Starman --port 3000 Mojolicious.pl
于 2011-07-20T21:55:00.450 に答える
3

Mojoliciousのファインマニュアルを読むことをお勧めします。ガイドは非常に重要です。具体的には、 Hypnotoad(組み込みのプリフォークWebサーバー)に関するセクションです。

于 2011-07-25T22:58:39.393 に答える
2
use AnyEvent;
use Mojolicious::Lite;

my @stack = ();

get '/' => sub {
    my $self = shift;

    $self->render_later;
    push @stack, AnyEvent->timer ( after => 5, cb => sub {
        $self->render_text('Hello World!');
    });
};

app->start;
于 2012-02-01T18:47:48.233 に答える
0

一度に複数の接続を実現する簡単な方法は、「daemon」を「prefork」に置き換えることです (hypnotoad よりもうまく機能する場合もあります)。

から:

app->start('daemon', '-l', 'http://*:8000');

に:

app->start('prefork', '-l', 'http://*:8000');

次の方法で自分でテストできます。

#!/usr/bin/perl -wl

use Mojolicious::Lite;

get '/' => sub {
    my $self = shift;
    for(my $wait = 10; $wait > 0; $wait--) {
        sleep(1);
    }
    $self->render(text => "OK");
};

# Uncomment to test hypnotoad. execute: hypnotoad ./this_script.pl
#app->config(hypnotoad => {listen => ['http://*:8000']});
#app->start;

# Test Daemon: (Uncomment next line)
#app->start('daemon', '-l', 'http://*:8000');

# Test Prefork: (Uncomment next line)
app->start('prefork', '-l', 'http://*:8000');

これはベンチマークです:

$ ab -n 10 -c 10 -s 120 http://localhost:8000/ :

結果:

(totals)         min  mean[+/-sd] median   max       total time
daemon:         11008 92020 28464.5 101021  101022   101.022 seconds
hypnotoad:      10017 31525 18811.0 49030   49033    49.036 seconds
prefork:        20018 24020 5165.0  20020   30022    30.029 seconds

理想的には、合計時間が 10 秒近くになることです... しかし、私はそれらの時間を改善する方法を (まだ) 見つけていません。

于 2016-06-06T05:48:04.600 に答える