0

我正在通过 plack 使用 Starman 运行一个 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);
}
4

2 回答 2

1

就像 文档说的:

该模块实现了一个非常简单的会话后端,将所有会话数据保存在内存中。这意味着会话是不稳定的,并且在进程退出时不再存在。该模块可能对测试目的最有用。

我认为两个不同的工作人员不共享会话信息,因为他们都有自己的内存副本。

编辑

看来我对锤击太热情了。当我在请求之间进行更大的停顿时,会话信息确实消失了。

于 2015-03-07T23:57:17.207 回答
0

有趣的是,我刚刚使用 session:"YAML" 进行了重新测试,它看起来工作正常 - 只是 Simple 似乎有问题。我将继续使用它,但如果有人有任何见解,我仍然很想得到答案。

戴夫

于 2015-03-07T22:41:03.657 回答