perl - 使用 perl Dancer/plack/Starman 和多个工作者的会话

  显示原文与译文双语对照的内容

我正在使用 Plack ( 希望这能正确地描述) 运行一个使用Starman的perl应用程序,而且大多数情况下这是一种无痛体验。 我最近一直在尝试让会话工作( 简单的东西- 我只是想存储几个字符串,我使用的是会话: with简单"),在运行多个工作人员的Starman时,我运行了非常奇怪的问题。

使用以下非常简单的代码( 在底部) 将导致以下结果:

独立应用:工作正常- 当你点击它时计数器递增。

Starman - 1工作者:工作正常

Starman - 2 + 员工: 会话似乎存在近 1秒,并且随后会被销毁- 计数器总是在很短的时间内为"过期"。 它似乎不是一个工人特定的会话,它只是重置为无。 如果你每秒多次击击链接,它将通常永久地增加( 或者只要我愿意测试它) 。

我有什么错误还是不能正常工作? 这并不是很重要,但是可以很好地获得简单的会话。

谢谢,

Dave


##


## 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);


}



时间: 原作者:

比如文档

这个模块实现一个非常简单的会话后端,保存内存中的所有会话数据。 这意味着会话是可变的,当进程退出时不再存在。 这里模块对于测试目的很有可能是最有用的。

因为两个不同的员工在内存中都有自己的拷贝,所以我认为他们不共享会话信息。

编辑

似乎我对锤子 hammering 。 当我在请求之间做了较大的停顿时,会话信息消失了,确实。

原作者:
...