Node.JS: Comment “fs.watchFile” travail?
Selon la Les docs de l'API pour le Nœud 0.4.3, le fs.watchFile(filename, [options], listener)
fonction commence une routine
De surveiller les modifications sur
filename
. Lecallback
auditeur sera appelée à chaque fois que le fichier est accessible.
Il dit aussi
La
options
si fourni doit être un objet contenant deux membres d'un booléen,persistent
, etinterval
, une interrogation de la valeur en millisecondes
Ce qui indique qu'il va vérifier chaque tellement souvent basées sur ce qui est dans l'intervalle. Mais il dit aussi
La valeur par défaut est
{ persistent: true, interval: 0 }
.
Donc, est-ce à dire qu'il va vérifier à chaque milliseconde pour voir si le fichier du temps a changé? Est-il écouter les OS, les événements de niveau? Comment cela fonctionne?
- Je pense que c'est un doublon de la stackoverflow.com/questions/4482352/...
- Voir tjameson réponse: si c'est peut-être un doublon, la réponse à cette vieille question est obsolète. Je pense que de 2013 il y a encore plus moderne, les solutions ne manquent pas.
- Il est intéressant de noter que dans le Nœud v6 la valeur par défaut est
{ persistent: true, interval: 5007 }
. Un intervalle de 0 ne fait pas de sens logique. Il ne ressemble pas à ce qui était vrai à l'époque, la question a été posée, mais l'implémentation actuelle dans le code source en C les changements de 0 à 1:ctx->interval = interval ? interval : 1;
.
Vous devez vous connecter pour publier un commentaire.
Oui, cpedros est correcte, cela ne semble pas être un doublon. Je pense que je peux faire la lumière sur cette même si.
Chaque OS a son propre fichier d'événement de changement qui est exclu. Sur Linux, il est inotify (utilisé pour être dnotify), sur Mac, c'est fsevents, et sur Windows, c'est FileSystemWatcher. Je ne sais pas si le code sous-jacent poignées de chaque cas, mais c'est l'Idée générale.
Si vous voulez juste regarder un fichier sur Linux, je recommande nœud-inotify-plus-plus. Si vous voulez regarder un répertoire, utilisez inotify-plus-plus avec nœud-pied. J'ai mis en place et cela a fonctionné comme un charme.
Je peux poster du code, si vous êtes intéressés. La beauté derrière nœud-inotify-plus-plus est que c'résumés beaucoup de la méchanceté de inotify et donne une API intuitive pour l'écoute à des événements spécifiques sur un fichier.
EDIT: Cela ne devrait pas être utilisé pour regarder des tonnes de fichiers. Sur mon système, le max est de 8192. Votre max peut être trouvé à l'aide de cette commande
cat /proc/sys/fs/inotify/max_user_watches
. Cela pourrait être utilisé pour juste regarder les répertoires pour les changements, et puis trouver les fichiers individuels à partir de là. Une modification de l'événement se déclenche si un fichier directement sous ce répertoire est modifié.EDIT: Merci @guiomie pour souligner que regarder des fichiers est maintenant entièrement pris en charge sur Windows. Je suppose que c'est avec la v0.6.x version.
Étendre sur tjameson fantastique de réponse, vous pouvez utiliser watchr de la normalisation de l'API entre le nœud versiosn et d'OS regarder les différences. Il fournit également des événements pour
unlink
etnew
au lieu de simplementchange
, ainsi que ajoute le support pour arbre de répertoire regarder.