将文件创建强制通知到 FAM 或 lighttpd
Force notification of file creation to FAM or lighttpd
环境:Debian、lighttpd、fam。不清楚虚拟专用服务器的内核Dnotify是否启用
我的 CGI 在文件系统中创建文件后,它会向客户端响应一条短消息,java 脚本 运行 在浏览器中,通知客户端文件已准备好下载。这里有一个问题——大多数时候客户端从 lighttpd 收到 http 404
错误,尤其是当本地主机中所有这些软件 运行 时。我认为这个问题是由于文件创建时 fam 通知 lighttpd 的延迟造成的。我想所有事件都按以下顺序发生:
- CGI 创建文件。
- CGI 响应客户端。
- 客户端从 lighttpd 获取文件。
- lighttpd 未在其缓存中找到该文件。
我可以想象,一旦文件在远程主机上创建并通过 NFS 通知到 lighttpd,这样的问题会更糟。
我的问题是:如何编写 CGI 代码以在响应客户端之前告知 lighttpd 有关文件创建的信息?
也就是说,我如何 "insert" 在上述步骤 1.
和 2.
之间添加一个通知步骤?如果我不能用 lighttpd 做到这一点但我可以用 nginx 做到这一点,我也可以考虑切换到后者。同样,我会很好地从 fam 切换到其他文件交替监视器。
此致,
lighttpd 没有缓存不存在的文件,因此问题更有可能出现在您的 CGI 脚本中。 CGI 脚本应该创建文件并关闭它,以便内核知道内容应该刷新到磁盘,因为它们可能仍然在 CGI 进程中缓冲在 stdio 中。只有在那之后,脚本才会向客户端发送消息。
如您所述,如果 CGI 运行 在与接收第二个文件请求的服务器不同的服务器上,并且文件存储在 NFS 或其他远程文件系统上,则需要额外的步骤。最简单的解决方案是让客户端等待一两秒钟,然后重试几次下载文件,因为典型的 NFS 缓存设置大约为 5 秒。
环境:Debian、lighttpd、fam。不清楚虚拟专用服务器的内核Dnotify是否启用
我的 CGI 在文件系统中创建文件后,它会向客户端响应一条短消息,java 脚本 运行 在浏览器中,通知客户端文件已准备好下载。这里有一个问题——大多数时候客户端从 lighttpd 收到 http 404
错误,尤其是当本地主机中所有这些软件 运行 时。我认为这个问题是由于文件创建时 fam 通知 lighttpd 的延迟造成的。我想所有事件都按以下顺序发生:
- CGI 创建文件。
- CGI 响应客户端。
- 客户端从 lighttpd 获取文件。
- lighttpd 未在其缓存中找到该文件。
我可以想象,一旦文件在远程主机上创建并通过 NFS 通知到 lighttpd,这样的问题会更糟。
我的问题是:如何编写 CGI 代码以在响应客户端之前告知 lighttpd 有关文件创建的信息?
也就是说,我如何 "insert" 在上述步骤 1.
和 2.
之间添加一个通知步骤?如果我不能用 lighttpd 做到这一点但我可以用 nginx 做到这一点,我也可以考虑切换到后者。同样,我会很好地从 fam 切换到其他文件交替监视器。
此致,
lighttpd 没有缓存不存在的文件,因此问题更有可能出现在您的 CGI 脚本中。 CGI 脚本应该创建文件并关闭它,以便内核知道内容应该刷新到磁盘,因为它们可能仍然在 CGI 进程中缓冲在 stdio 中。只有在那之后,脚本才会向客户端发送消息。
如您所述,如果 CGI 运行 在与接收第二个文件请求的服务器不同的服务器上,并且文件存储在 NFS 或其他远程文件系统上,则需要额外的步骤。最简单的解决方案是让客户端等待一两秒钟,然后重试几次下载文件,因为典型的 NFS 缓存设置大约为 5 秒。