Smalltalk 当我在服务http请求时保存Pharo映像时会发生什么?

Smalltalk 当我在服务http请求时保存Pharo映像时会发生什么?,smalltalk,pharo,seaside,Smalltalk,Pharo,Seaside,Seaside的书中说:“在处理http请求时保存[图像]是您希望避免的风险” 这是为什么?它只是暂时减慢了http请求的服务速度,还是请求会丢失或出现错误?似乎这只是一个放慢速度的问题。在Seaside列表上,最相关的帖子是一个电子商务网站: 因此,目前的情况是: 映像会不时保存(通常每天),并复制到单独的“备份”计算机 如果发生任何不好的情况,将抓取最后一个映像,并保存自上次映像以来发出的订单和/或礼品证书 只需重新输入即可 而且,#2很少被做——可能一年做两三次 一年后,结果通常是因为我做

Seaside的书中说:“在处理http请求时保存[图像]是您希望避免的风险”


这是为什么?它只是暂时减慢了http请求的服务速度,还是请求会丢失或出现错误?

似乎这只是一个放慢速度的问题。在Seaside列表上,最相关的帖子是一个电子商务网站:

因此,目前的情况是:

  • 映像会不时保存(通常每天),并复制到单独的“备份”计算机
  • 如果发生任何不好的情况,将抓取最后一个映像,并保存自上次映像以来发出的订单和/或礼品证书 只需重新输入即可
  • 而且,#2很少被做——可能一年做两三次 一年后,结果通常是因为我做了什么 愚蠢的

    此外,Smalltalk的一个优点是,运行快速实验非常容易。您可以下载Seaside并在其中一个示例的回调中暂停。例如:

    WACounter>>renderContentOn: html
    ...
        html anchor
            callback: [ 
                self halt.
                self increase ];
            with: '++'.
    ...
    
  • 在Seaside服务器上打开浏览器(默认情况下为端口8080)
  • 单击“计数器”转到示例应用程序
  • 单击“+”链接
  • 切换回Seaside。您将看到暂停的预调试窗口
  • 保存图像
  • 单击“继续” 您将看到计数器正确递增,并且保存不会产生明显的不良影响

  • 在保存映像之前,将执行注册的关闭操作。这意味着关闭源文件并关闭web服务器。在保存映像之后,它将执行启动操作,这通常会再次启动web服务器。根据服务器实现,打开的连接可能会关闭

    这意味着您在保存映像时无法接受新连接,打开的连接可能会暂时挂起或关闭。对于这两个问题,有(至少)两个简单的解决方法:

  • 在保存图像之前,请使用OSProcess(DabbleDB、CmsBox)对其进行分叉

  • 使用多个映像和负载平衡器,以便在保存映像之前可以从活动服务器中一次删除一个映像


  • 很有趣…如果“打开的连接关闭”",我上面的实验是如何工作的?我保存了映像,并且在继续之后客户端页面仍然正确更新。是的,你是对的。套接字不是由VM或关闭操作关闭的。但是,根据服务器实现的不同,停止服务器可能会关闭打开的连接。我更正了上面的答案。邮件列表线程值得一读,谢谢你指点。