当我在提供http请求时保存Pharo图像会发生什么?

时间:2012-06-17 10:45:02

标签: smalltalk pharo seaside

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

这是为什么?是暂时放慢服务http请求还是请求丢失或发生错误?

2 个答案:

答案 0 :(得分:3)

似乎这只是一个放慢速度的问题。海边列表上有this quite thorough thread,其中最相关的帖子是this case study电子商务网站:

  

因此,目前正是如此:

     
      
  1. 图像会不时保存(通常是每天),并复制到单独的“备份”计算机。
  2.   
  3. 如果发生任何不良事件,将抓取最后一张图片,以及自上次保存图片以来发出的订单和/或礼品券   只需重新输入。
  4.         

    并且,#2很少非常 - 可能是两次或三次   一年,然后事实证明这通常是因为我做了一些事情   笨

此外,关于Smalltalk的一个好处是,它可以很容易地进行快速实验。您可以下载Seaside并停止其中一个示例的回调。例如:

WACounter>>renderContentOn: html
...
    html anchor
        callback: [ 
            self halt.
            self increase ];
        with: '++'.
...
  1. 在Seaside服务器上打开浏览器(默认为端口8080)
  2. 点击“计数器”转到示例应用
  3. 点击“++”链接
  4. 切换回Seaside。您将看到停止的预调试窗口
  5. 保存图片
  6. 点击“继续” 您将看到计数器正确递增,而保存没有明显的不良影响。

答案 1 :(得分:3)

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

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

  1. 在保存之前使用OSProcess分割图像(DabbleDB,CmsBox)。

  2. 使用多个映像和负载均衡器,以便在保存之前可以从活动服务器中逐个删除一个映像。