使用基于图像的持久性并使用Seaside保存时,网页会超时吗?

时间:2016-01-30 20:06:20

标签: pharo seaside

我在创建新用户时使用代码here来保存图片(持久性章节)

saveImageWithoutMonitor

 SmalltalkImage current saveSession.


writeMutex

 ^ WriteMutex ifNil: [WriteMutex := Monitor new]

问题是保存图像需要时间,我怀疑端口8080上的Seaside无法访问,浏览器尝试请求下一页并且无法连接。有更好的方法吗?或者配置Seaside以延迟页面响应?

PS。我记得你必须在Seaside的配置页面配置它,它会等待。

1 个答案:

答案 0 :(得分:1)

在保存图像关闭期间,将处理启动列表,在此期间所有套接字都将被销毁,因此连接将被取消。我们所做的是分叉图像(使用OSProcess)并在子进程中进行保存。甚至还有一种方法可以为您完成此操作,请参阅OSProcess>>saveImageInBackground

旁注:使用像这样的分叉流程时会出现一些竞争条件。如果您正在处理负载,可能会发生例如子进程"窃取"来自父进程的套接字,这将导致连接超时。为了防止这种情况,你需要在fork操作期间关闭套接字,这不是一个容易解决的问题。