我正在通过plack使用Starman运行一个perl Dancer应用程序(希望这是正确的描述),而且大多数情况下,这是一次无痛的体验。我最近一直在尝试让会话正常工作(非常简单的东西--我只想存储几个字符串,我使用的是会话:" simple "),当我与多个工作人员一起运行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);
}发布于 2015-03-07 23:57:17
就像文档说的:
该模块实现了一个非常简单的会话后端,将所有会话数据保存在内存中。这意味着会话是不稳定的,在进程退出时不再存在。这个模块可能对测试非常有用。
我认为两个不同的工作人员不共享会话信息,因为他们在内存中都有自己的副本。
编辑
好像我太热衷于锤打了。当我在请求之间作了更大的停顿时,会话信息确实消失了。
发布于 2015-03-07 22:41:03
有趣的是,我刚刚重新测试了使用会话:"YAML“,它看起来工作正常-它只是简单的,似乎有问题。我打算暂时使用这个方法,但是如果有人有洞察力的话,我还是很想得到一个答案。
戴夫
https://stackoverflow.com/questions/28920848
复制相似问题