Linux 应用程序后如何操作->;开始在MojolicousWebSocket for Perl中

Linux 应用程序后如何操作->;开始在MojolicousWebSocket for Perl中,linux,perl,mojolicious,mojolicious-lite,Linux,Perl,Mojolicious,Mojolicious Lite,我有一个在Linux上运行的服务器端websocket,最后websocket正在运行,但需要在app->start之后执行更多; 就像下面的代码一样,我在hello world上印了一个字来试一下,但它不起作用。 有人知道怎么处理吗 #!/usr/bin/perl use utf8; use Mojolicious::Lite; use DateTime; use Mojo::JSON; use Mojo::Transaction::WebSocket; use Data::Dumpe

我有一个在Linux上运行的服务器端websocket,最后websocket正在运行,但需要在app->start之后执行更多; 就像下面的代码一样,我在hello world上印了一个字来试一下,但它不起作用。 有人知道怎么处理吗

    #!/usr/bin/perl
use utf8;
use Mojolicious::Lite;
use DateTime;
use Mojo::JSON;
use Mojo::Transaction::WebSocket;
use Data::Dumper;
no strict "refs";

get '/' => 'index';
my $clients = {};
# Arrays voor het ordenen van gasten
my @hoofdArray =();
my $teller = 0;

websocket '/echo' => sub {
    my $self = shift;
    $self->inactivity_timeout(0);
    app->log->debug(sprintf 'Client connected: %s', $self->tx);
    # Toevoegen origin op array positie 
    $teller = $teller + 1;      
    # later renderen van de websocket

    # Pushen van alle gasten in een array
    my $id = sprintf "%s", $self->tx;
    $clients->{$id} = $self->tx;
    $self->on(message =>
        sub {

            my ($self, $msg) = @_;

            if (index($msg, "naam:") != -1){
                my $ori = $self->tx->handshake->connection;
                my $naam = substr $msg,5;
                print $naam."\n";

                my @gasten = ();
                push(@gasten, $ori);
                push(@gasten, $naam);
                push(@hoofdArray, \@gasten);
            }
            else {   
                my $json = Mojo::JSON->new;
                my $dt   = DateTime->now( time_zone => 'Europe/Amsterdam');
                my $currentNaam = "undefinid";
                for (my $i = 0; $i < @hoofdArray; $i++){

                    if($hoofdArray[$i]->[0] eq $self->tx->handshake->connection){
                        $currentNaam = $hoofdArray[$i]->[1];
                        last;
                    }
                }

                for (keys %$clients) {
                    $clients->{$_}->send(
                        $json->encode({
                            hms  => $currentNaam,
                            text => $msg,
                        })
                    );
                    #print $_[0]->tx->handshake->req->content->headers->origin."\n";
                    #print $_[0]->tx->handshake->connection."\n";

                }
                print Dumper $hoofdArray[0];
                print Dumper $hoofdArray[1];
            }
        }
    );

    $self->on(finish =>
        sub {
            app->log->debug('Client with hash: '.$clients->{$id}.' disconnected');
            delete $clients->{$id};
        }
    );
};

app->start;
print "Hello World! \n";
#/usr/bin/perl
使用utf8;
使用mojolicous::Lite;
使用日期时间;
使用Mojo::JSON;
使用Mojo::Transaction::WebSocket;
使用数据::转储程序;
没有严格的“参考文献”;
获取“/”=>“索引”;
我的$clients={};
#奥德内范加斯滕酒店
我的@hoofdArray=();
我的$teller=0;
websocket'/echo'=>sub{
我的$self=shift;
$self->inactivity\u超时(0);
应用程序->日志->调试(sprintf'客户端连接:%s',$self->tx);
#Toevoegen原点op阵列正
$teller=$teller+1;
#后来的renderen van de websocket
#Pushen van alle gasten在een阵列中
my$id=sprintf“%s”,$self->tx;
$clients->{$id}=$self->tx;
$self->on(消息=>
潜艇{
我的($self,$msg)=@;
如果(索引($msg,“naam:”)!=-1){
我的$ori=$self->tx->握手->连接;
my$naam=substr$msg,5;
打印$naam。“\n”;
我的@gasten=();
推送(@gasten,$ori);
推送(@gasten,$naam);
推送(@hoofdArray,\@gasten);
}
否则{
my$json=Mojo::json->new;
my$dt=DateTime->now(时区=>'Europe/Amsterdam');
my$currentNaam=“未定义”;
对于(我的$i=0;$i<@hoofdArray;$i++){
if($HOOFDRARY[$i]->[0]eq$self->tx->握手->连接){
$currentNaam=$hoofdArray[$i]->[1];
最后;
}
}
对于(密钥%$客户端){
$clients->{${}->send(
$json->encode({
hms=>$currentNaam,
text=>$msg,
})
);
#打印$\u0]->发送->握手->请求->内容->标题->来源。“\n”;
#打印$\u0]->发送->握手->连接。“\n”;
}
打印转储程序$HOOFDRARY[0];
打印转储程序$HOOFDRARY[1];
}
}
);
$self->on(完成=>
潜艇{
app->log->debug('Client with hash:'.$clients->{$id}.'disconnected');
删除$clients->{$id};
}
);
};
应用程序->启动;
打印“Hello World!\n”;

简单的回答是app->start永远不会返回。app->start前面的代码为您定义的路由创建处理程序。当服务器收到对其中一个路由的请求时,它将使用您提供的处理程序之一生成服务器返回的内容。您可能会发现阅读一些有关事件驱动编程的内容会有所帮助。这些路由可以被认为是程序正在处理的事件。app->start或多或少意味着“启动事件循环”。

简短的回答是app->start永远不会返回。app->start前面的代码为您定义的路由创建处理程序。当服务器收到对其中一个路由的请求时,它将使用您提供的处理程序之一生成服务器返回的内容。您可能会发现阅读一些有关事件驱动编程的内容会有所帮助。这些路由可以被认为是程序正在处理的事件。app->start more或less意味着“启动事件循环”。

你想完成什么?我想你误解了Mojolicious的目的——它被设计成一个web框架,通过web服务器交付内容。在这种情况下,仅仅打印是没有意义的。你想实现什么?我想你误解了Mojolicious的目的——它被设计成一个web框架,通过web服务器交付内容。在这种情况下,仅仅打印是没有意义的。