2016-03-22 2 views
0

Environnement: Debian, lighttpd, fam. On ne sait pas si le noyau du serveur privé virtuel Dnotify est activé ou non. Après que mon CGI crée un fichier dans le système de fichiers, il répond à un client, un script java s'exécutant dans le navigateur, et avertit le client que le fichier est prêt pour le téléchargement. Il y a un problème ici - la plupart du temps le client obtient l'erreur http 404 de lighttpd particulièrement quand tous ces logiciels fonctionnent dans localhost. Je pense que ce problème est causé par la latence de lighttpd notifiée par fam de la création du fichier. J'imagine que tous les événements se produisent dans l'ordre suivant:Force la notification de création de fichier à FAM ou lighttpd

  1. CGI crée un fichier.
  2. CGI répond au client.
  3. client récupère le fichier depuis lighttpd. Lighttpd ne trouve pas le fichier dans son cache.

Je peux imaginer qu'un tel problème sera pire une fois le fichier créé dans l'hôte distant et notifié à lighttpd via NFS.

Ma question est: comment coder CGI pour dire lighttpd sur la création de fichiers avant de répondre au client?

En d'autres termes, comment puis-je "insérer" une étape de notification entre les étapes 1. et 2. ci-dessus? Si je ne peux pas le faire avec lighttpd mais que je peux le faire avec nginx, je peux aussi envisager de passer à ce dernier. De même, je vais bien passer de fam à d'autres moniteurs d'alternance de fichiers.

Cordialement,

Répondre

1

lighttpd n'est pas mise en cache des non-existence du fichier, si le problème est plus probable dans votre script CGI. Le script CGI devrait créer le fichier et devrait le fermer afin que le noyau sache que le contenu devrait être vidé sur le disque, car ils pourraient encore être tamponnés dans stdio dans le processus CGI. Ce n'est qu'après que le script devrait envoyer un message au client.

Comme vous l'avez noté, des étapes supplémentaires sont requises si le CGI est exécuté sur un serveur différent de celui recevant la deuxième requête pour le fichier et le fichier est stocké sur NFS ou un autre système de fichiers distant. La solution la plus simple consiste à faire patienter le client une seconde ou deux et à réessayer de télécharger le fichier plusieurs fois, car les paramètres de mise en cache NFS typiques sont d'environ 5 secondes.