44

私は次のユースケースを持っています:

Aはチャットを作成し、BとCを招待します-サーバー上でAはファイルを作成します。A、B、Cはこのファイルにメッセージを書き込みます。A、B、Cがこのファイルを読み取ります。

サーバー上にファイルを作成し、他の誰かがこのファイルに何かを書き込んだ場合にこのファイルを監視して、新しいコンテンツをWebSocketで送り返したいと思います。

したがって、このファイルの変更は、node.jsアプリケーションで監視する必要があります。

ファイルの変更を監視するにはどうすればよいですか?これは、ファイルをロックせずにノードjsで可能ですか?

ファイルで不可能な場合、データベースオブジェクト(NoSQL)で可能でしょうか

4

3 に答える 3

60

幸いなことに、NodeのAPIを使用してファイルの変更を監視できます。

ただし、これでは、ファイルに書き込まれた内容にアクセスすることはできません。このfs.appendFile();関数を使用すると、ファイルに何かが書き込まれているときに、書き込まれている新しいデータを「ログに記録」するイベントを他の何かに発行することができます。

fs.watch():ドキュメントから直接貼り付け

fs.watch('somedir', function (event, filename) {
    console.log('event is: ' + event);
    if (filename) {
        console.log('filename provided: ' + filename);
    } else {
        console.log('filename not provided');
    }
});

fs.watch()についてここを読んでください。働き

編集:あなたは機能を使用することができます

fs.watchFile(); 

fs.watchFile();についてここを読んでください。働き

これにより、ファイルの変更を監視できます。つまり。あらゆる種類の他のプロセスによってアクセスされるときはいつでも。

于 2012-12-04T07:36:34.873 に答える
5

また、 node-watchを使用することもできます。簡単な例を次に示します。

const watch = require('node-watch')

watch('README.md', function(event, filename) {
  console.log(filename, ' changed.')
})
于 2016-04-21T19:37:50.853 に答える
2

ファイルの変更を監視したり、NoSQLデータベースを使用したりする必要はないと思います(必要がない場合)。私のアドバイスは、イベントオブザーバーパターン)を調べることです。このトピックに関する十分なチュートリアルがオンライン(Google)で利用できます。たとえば、EventEmittersの使用に関するFelixの記事

このパブリッシュ/サブスクライブセマンティクスは、NoSQLでも実現できます。たとえば、 Redisでは、 pubsubを確認する必要があると思います。

MongoDBでは、調整可能なカーソルがあなたが探しているものだと思います。彼らのブログには、pub/subを説明する投稿があります。

于 2012-12-04T08:56:18.293 に答える