【问题标题】:Force notification of file creation to FAM or lighttpd强制向 FAM 或 lighttpd 通知文件创建
【发布时间】:2016-03-22 09:35:56
【问题描述】:

环境:Debian、lighttpd、fam。虚拟专用服务器的内核 Dnotify 是否开启尚不清楚。

我的 CGI 在文件系统中创建一个文件后,它会向客户端响应一条短消息,在浏览器中运行 java 脚本,通知客户端该文件已准备好下载。这里有一个问题 - 大多数时候客户端从 lighttpd 收到 http 404 错误,尤其是当所有这些软件在 localhost 中运行时。我认为这个问题是由文件创建的 fam 通知 lighttpd 的延迟引起的。我想所有事件都按以下顺序发生:

  1. CGI 创建一个文件。
  2. CGI 响应客户端。
  3. 客户端从 lighttpd 获取文件。
  4. lighttpd 在其缓存中找不到该文件。

我可以想象,一旦文件在远程主机中创建并通过 NFS 通知到 lighttpd,这样的问题会更糟。

我的问题是:如何编写 CGI 代码以在响应客户端之前告诉 lighttpd 文件创建?

也就是说,我如何在上述步骤1.2. 之间“插入”通知步骤?如果我不能用 lighttpd 做到这一点,但我可以用 nginx 做到这一点,我也可以考虑切换到后者。同样,我可以从 fam 切换到其他文件交替监视器。

最好的问候,

【问题讨论】:

    标签: cgi lighttpd


    【解决方案1】:

    lighttpd 没有缓存不存在的文件,因此问题更可能出现在您的 CGI 脚本中。 CGI 脚本应该创建文件并关闭它,以便内核知道应该将内容刷新到磁盘,因为它们可能仍被缓冲在 CGI 进程中的 stdio 中。只有在那之后,脚本才会向客户端发送消息。

    如您所述,如果 CGI 运行在与接收第二个文件请求的服务器不同的服务器上,并且文件存储在 NFS 或其他远程文件系统上,则需要执行额外的步骤。最简单的解决方案是让客户端等待一两秒,然后重试几次下载文件,因为典型的 NFS 缓存设置约为 5 秒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      相关资源
      最近更新 更多