Existe-t-il un moyen d'utiliser des variables de paquet / globales avec danseur et Starman?

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

  •  21-12-2019
  •  | 
  •  

Question

Je ne peux pas comprendre un moyen d'utiliser des variables d'emballage (ou quoi que ce soit du tri) dans les applications de danseuse lorsqu'il est exécuté avec Starman.Je suppose que cela est en quelque sorte lié à la préférence de Starman mais qui est censé être une fonctionnalité, pas un bug.

Voici l'exemple d'application danseur:

package nafig;
use Dancer;

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

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

start;

Alors je fais 3 appels consécutifs à cette application.Premièrement, je l'exécute avec le serveur de référence Plack et tout fonctionne comme prévu:

$ 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

Mais quand je fais la même chose avec Starman, je reçois ce qui suit.

$ 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

Cependant, lorsque vous rafraîchissez la page rapidement, les valeurs sont parfois incrémentées comme prévu.Je suppose que Starman reste dans la même fourche dans ces cas.

Je suis surpris que cette question n'a jamais été demandé sur Stackoverflow avant.Les variables persistantes me semblent utiles, comment les gens dansent-ils sans eux?

Merci d'avance pour toute aide.

Était-ce utile?

La solution

Vous aurez besoin d'un module comme cache :: Memcached qui vous permet de stocker l'étatsur les fils fourchus.

quelque chose comme ça (non testé)

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;

adapté d'ici http://perl.posbit.com/how-to-use-Memcached-with-Perl.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top