我在创建新用户时使用代码here来保存图片(持久性章节)
saveImageWithoutMonitor
SmalltalkImage current saveSession.
writeMutex
^ WriteMutex ifNil: [WriteMutex := Monitor new]
问题是保存图像需要时间,我怀疑端口8080上的Seaside无法访问,浏览器尝试请求下一页并且无法连接。有更好的方法吗?或者配置Seaside以延迟页面响应?
PS。我记得你必须在Seaside的配置页面配置它,它会等待。
答案 0 :(得分:1)
在保存图像关闭期间,将处理启动列表,在此期间所有套接字都将被销毁,因此连接将被取消。我们所做的是分叉图像(使用OSProcess)并在子进程中进行保存。甚至还有一种方法可以为您完成此操作,请参阅OSProcess>>saveImageInBackground
。
旁注:使用像这样的分叉流程时会出现一些竞争条件。如果您正在处理负载,可能会发生例如子进程"窃取"来自父进程的套接字,这将导致连接超时。为了防止这种情况,你需要在fork操作期间关闭套接字,这不是一个容易解决的问题。