複数のユーザーが同時にログインしていて、同じファイルを同時に書き込むことができます。 複数のユーザーがnodejs内の1つのファイルに書き込んでいるときに、ファイルの衝突を防ぐ方法を教えてください。nodejs内の複数のユーザーによって書き込まれる単一ファイル
答えて
シンプルな解決策が1つのノードプロセスしか持たないと仮定すると、fs.writeFileSync
を使用することになります。
適切な方法は、rwlockを使用してファイルを適切にロックし、一度に1つのプロセスしか書き込めないようにすることです。
まあ、fs.writeFileSync
はイベントループをブロックし、ノードイベントキューの残りの非同期関数をブロックします。別のより良いアプローチは、semaphore
のようなモジュールを使用することです。
var sem = require('semaphore')(1);
var server = require('http').createServer(req, res) {
res.write("Start your file write sir");
sem.take(function() {
// Process your write to file using fs.writeFile
// And finish the request
res.end("Bye bye, your file write is done.");
sem.leave();
});
});
これは、イベントループ全体をブロックすることなく、他のHTTPリクエストをブロックします。これまでに非同期であることを忘れないでください!
私のシステムでは、基本的に、多くのユーザが同時にログインしていて、スクリーン上のものを変更します。これらはウェブソケット経由でサーバに送られます。それらの変更はすべて1つのファイルに保存する必要があります。だから私は(サーバー側で)ユーザーが何を変更しても受け入れる必要があります。 余分なことが必要ですか、下のコードが正常に機能しますか? //サーバ側では、次のようなものがあります。 socket.on( 'newObject'、function(data){ fs.writeFileSync(......); //データがファイルに追加されました。 } – Umer
- 1. ObjectOutputStreamを使用して単一のZipOutputStreamに複数のZipEntryに書き込む
- 2. mpiを使って単一のtxtファイルに行列を書き込む
- 3. 複数のスレッドによるファイル書き込みの動作
- 4. NodeJS内の複数のモジュールに対する単一のMySQL接続
- 5. Nodejsがファイルにjsonを書き込む
- 6. 複数のファイルへの書き込み
- 7. Ruby:システムプロセスによって書き込まれたファイルからの読み込み
- 8. ファイルの一部を読み込んで単一のunsigned charに書き込む
- 9. CellForRowAtIndexを単一ビューで複数のuitableviewに書き込む方法
- 10. 複数の値をcsvファイル内の異なる列に書き込むR
- 11. 複数の書き込みが単一のものとして処理される
- 12. UACによるファイルとユーザーの制限の書き込み
- 13. Pythonが関数のデータを使ってファイルに書き込む
- 14. log4j2:同じ出力が複数のファイルに書き込まれる
- 15. phpを使ってforループ内にファイルを書き込む
- 16. 単一のリスト内の複数のクラスタイプ
- 17. マッパーから単一ファイルに書き込む
- 18. 単一サーバー内の同じWARファイルの複数のインスタンス
- 19. 単一クエリ内の複数のCTE
- 20. 複数のコードブロックを単一の<script>タグに書き込むことはできません
- 21. NodeJS、socketIO、複数のファイル
- 22. バンドル内のファイルに書き込む?
- 23. 複数のスレッドで書き込みファイルを読み込む
- 24. 単一のneo4jデータベース用に複数のユーザーを作成できますか?
- 25. PySparkの複数のファイルにRDDを書き込む
- 26. 複数のunittestを複数のファイルでダーツに書き込む方法は?
- 27. 複数のSWFファイルを単一のEXEファイルに変換する
- 28. シェルを使ってファイルにfloat変数を書き込む
- 29. C++のjavaのwriteIntメソッドによって書き込まれたファイルからintを読み込みますか?
- 30. 複数のストリームに書き込むラッパー
あなたのユースケースを共有してください。 –
私のシステムでは、多くのユーザーが同時にログインしていて、画面上のものを変更してWebソケット経由でサーバーに送信します。 1つのファイルに保存します。だから私は(サーバー側で)ユーザーが何を変更しても受け入れる必要があります。実際には、これらの変更のそれぞれを1つのファイルに追加する必要があります。しかし、ファイルがすでに書き込まれている可能性があるので、単にファイルに書き込むことはできません。だから私は、どのような要求が最初に来たかに基づいて私のファイルが更新されているキューの並べ替えを見なければならないかもしれません。 – Umer