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