我正在使用Starman通过plack运行perl Dancer应用程序(希望这是正确描述的东西),而且大多数情况下这是一种无痛的体验。我最近一直试图让会话工作(真的简单的东西 - 我只想存储几个字符串,我正在使用会话:"简单")在与多个工作人员一起运行Starman时,我遇到了一些非常奇怪的问题。
使用以下非常简单的代码(位于底部)会产生以下结果:
独立应用: 工作正常 - 单击它时计数器会递增。
Starman - 1名工人: 工作正常
Starman - 2名以上的工人: 会话似乎存在大约1秒钟,随后被销毁 - 计数器总是"到期"经过很短的一段时间。它似乎不是一个特定于工作人员的会话,它只是重置为空。如果你每秒敲击链接超过一次,它会永远增加(或者只要我可以打扰测试它)。
我做错了什么,或者这不起作用?它并不是非常关键,但能够让简单的会话工作会很棒。
谢谢,
戴夫
##
## Code to reproduce via:
## plackup -D -E env -s Starman --workers=3 -p 3000 -a myapp.pl
##
get '/sessiontest' => sub {
return(&sessiontest());
};
sub sessiontest {
my $testcounter = session 'testcounter' || 0;
$testcounter++;
session 'testcounter' => $testcounter;
info "SESSION COUNTER($testcounter)";
my $return = <<EOF;
<html>
<body>
<a href=\"/sessiontest\">$testcounter</a>
</body>
</html>
EOF
return($return);
}
答案 0 :(得分:1)
像 docs说:
这个模块实现了一个非常简单的会话后端,包含所有内容 会话数据在内存中。这意味着会话是易变的,没有 进程退出时存在的时间更长。这个模块可能是最多的 用于测试目的。
我认为两个不同的工作人员不会共享会话信息,因为他们都有自己的内存副本。
修改强>
似乎我对锤击过于热情。当我在请求之间做出更大的停顿时,会话信息确实消失了。
答案 1 :(得分:0)
有趣的是,我只是使用会话重新测试:&#34; YAML&#34;看起来它工作正常 - 它只是简单似乎有问题。我将暂时继续使用它,但如果有人有任何见解,我仍然会很乐意收到答案。
戴夫