Есть ли способ использовать пакет / глобальные переменные с танцором и Старманом?

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

  •  21-12-2019
  •  | 
  •  

Вопрос

Я не могу выяснить способ использовать переменные пакета (или что-нибудь из своего рода) в приложениях танцора при запуске со Стардами.Полагаю, это как-то связано с преобразом Стармана, но это должно быть функцией, а не ошибка.

Вот приложение пример танцора:

package nafig;
use Dancer;

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

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

start;
.

Тогда я делаю 3 последовательных призыва к этому приложению.Во-первых, я бегу с помощью справочного сервера Plact, и все работает, как и ожидалось:

$ 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
.

Но когда я делаю то же самое со Старданом, я получаю следующее.

$ 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
.

Однако при быстром освежении страницы, иногда значения увеличиваются, как ожидалось.Я думаю, Старман остается в том же вилке в этих случаях.

Я удивлен, этот вопрос никогда не просил в Stackoverflow раньше.Настойчивые переменные кажутся полезными для меня, как люди танцуют без них?

заранее спасибо за любую помощь.

Это было полезно?

Решение

Вам понадобится модуль, такой как Cache :: memcached Что позволяет хранить состояниенад раздрованными нитями.

что-то вроде этого (непроверенного)

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;
.

Адаптирован отсюда http://perl.postbit.com/how-to-use-memcached-with-perl.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top