Jas*_*eux 3 iis perl apache-2.2
我有一个 Perl 脚本,它由最终用户单击 Web 浏览器中的快捷方式激活。该脚本遍历哈希值列表。当每次迭代将一行插入数据库时,它会向浏览器输出一些 HTML。环境为 Perl、Windows Server 2003 标准版、IIS。我最近迁移到 Apache。传统上迭代次数很少,大多数用户在页面加载完成后关闭浏览器。现在,我们有一个案例,其中有多达 5000 次迭代。现在执行这 5000 次迭代需要很长时间(1 分钟~)。那不是问题。问题在于,当用户关闭 Web 浏览器时,Apache 会终止 Perl 脚本,并且我们没有完成将行插入数据库的过程,因为浏览器不会确认最近发送的 html。我在 IIS 下对此进行了测试,在用户关闭 Web 浏览器后,Perl 脚本继续运行并插入所有行。Apache 配置文件中是否有一个设置会强制 Apache 完成运行 Perl 脚本,即使在浏览器关闭并删除套接字后?
这就是我们正在做的:
foreach my $Destination (sort keys %{$self->{_Destinations}}) {
print qq! <td $self->{_bgcolor}>$Destination Queued</td> !;
if ($self->{_Data}->Execute(@params)) {&error}
}
Run Code Online (Sandbox Code Playgroud)
我知道我们应该做所有的数据库插入然后做我们的打印,但这是遗留代码,如果我能让 Apache 在这方面表现得像 IIS 那么我将有时间更彻底地重写这个脚本.
即使浏览器关闭/连接在后台作业中终止,您也需要放置任何必须发生的工作。使用工作队列(我喜欢 resque,但实际上任何东西都可以工作)和作业处理器来检索作业并进行必要的插入。最好在 stackoverflow 上询问有关编写该代码的问题。
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |