Existe uma maneira de usar o pacote/variáveis globais com o Dançarino e Starman?

StackOverflow https://stackoverflow.com//questions/20035318

  •  21-12-2019
  •  | 
  •  

Pergunta

Eu não conseguir descobrir uma maneira de usar o pacote de variáveis (ou qualquer coisa do tipo) no Dançarina apps quando executado com Starman.Eu suponho que ele está de alguma forma relacionado com Starman do preforking mas que é suposto para ser um recurso, não um bug.

Aqui está o exemplo Dançarina do aplicativo:

package nafig;
use Dancer;

my $a = 0;
$b = 0;
$nafig::c = 0;

any '/' => sub {
    warn join " ", $a++, $b++, $nafig::c++;
};

start;

Então eu faço o 3 chamadas consecutivas para a aplicação.Primeiro, eu executá-lo com plack servidor de referência, e tudo funciona como esperado:

$ plackup app.pl
HTTP::Server::PSGI: Accepting connections at http://0:5000/
0 0 0 at ... blah-blah-blah
1 1 1 at ... blah-blah-blah
2 2 2 at ... blah-blah-blah

Mas quando eu faço a mesma coisa com Starman, recebo a seguinte.

$ plackup -s Starman app.pl
2013/11/17-23:33:35 Starman::Server (type Net::Server::PreFork) starting! pid(527)
Resolved [*]:5000 to [::]:5000, IPv6
Not including resolved host [0.0.0.0] IPv4 because it will be handled by [::] IPv6
Binding to TCP port 5000 on host :: with IPv6
Setting gid to "1000 1000 20 24 25 29 30 44 46 108 109 115 121 1000"
Starman: Accepting connections at http://*:5000/
0 0 0 at ... blah-blah-blah
0 0 0 at ... blah-blah-blah
0 0 0 at ... blah-blah-blah

No entanto, quando atualizar a página rapidamente, às vezes, os valores são incrementados conforme o esperado.Eu acho que, Starman permanece no mesmo garfo nesses casos.

Estou surpreso com esta pergunta nunca foi feita no stackoverflow antes.Persistente variáveis parecem útil para mim, como fazer as pessoas dançar sem eles?

Agradecemos antecipadamente por qualquer ajuda.

Foi útil?

Solução

Você vai precisar de um módulo, como Cache::Memcached que permite que você armazene estado bifurcado threads.

algo como isto (não testado)

use strict;
use warnings;

package nafig; #this should start with a capital letter
use Dancer;
use Cache::Memcached;

my $cache =  new Cache::Memcached {
    'servers' => ['127.0.0.1:11211'],
    'compress_threshold' => 10_000,
};

$cache->set("var1", 0);

any '/' => sub {

    my $value = $cache->get("var1");

    warn join " ", $value++;

    $cache->set("var1", $value);
};

start;

adaptado daqui http://perl.postbit.com/how-to-use-memcached-with-perl.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top