チャット ログを書き込む必要があり、さまざまな理由からデータを JSON として保存したいと考えています。
いつでも多くのルームを開いている可能性があり、現在writeStream
、最初のユーザーがルームに入ったときに a を開き、最後のユーザーが退出したときにストリームを終了しています。
このwriteStream
オブジェクトは、ルームと現在オンラインのユーザーに関するその他の詳細とともに、配列に一時的に保存されます。このようにいつでも各ルーム オブジェクトを利用できるので、さまざまなルームのユーザーがチャットするときに、多くのチャット ログ ファイルに継続的に書き込むことが非常に迅速かつ効率的であると理解しています。
私はnode.jsにまったく慣れていないので、お気軽に修正して、上記のより効率的な方法を提供してください。
しかし、私の実際の質問に。
各書き込みは、特定のユーザーデータ、チャットの本文、そしてもちろんチャットが発生した時刻を含む単一の JavaScript オブジェクトです。
私は現在txt
ファイルを作成JSON.stringify()
しており、各チャットオブジェクトの文字列化されたバージョンをファイルに追加するために使用しています。
もちろん、これは無効な JSON を生成し、次のテキスト表現になります。
{"userid":"1","body":"hello world"}{"userid":"2","body":"hello world 2"}{"userid":"3","body":"hello world 3"}
実際に読む必要がある場合:
[{"userid":"1","body":"hello world"},{"userid":"2","body":"hello world 2"},{"userid":"3","body":"hello world 3"}]
これに対する明らかな解決策は、実際に node.js でファイルを開き、JSON を解析し、オブジェクトを配列にプッシュしてから、すべてのデータを書き戻すことです。しかし、これはIOと処理の両方にとって非常に高価に感じます。
別の方法として|
、各オブジェクトの先頭などに特殊文字を追加することもできます。次に、クライアント側でログ ファイルを読み取るときに、ファイルの内容をその文字で単純に分割し、結果の配列内の各オブジェクトを JSON.parse します。しかし、確かに良い方法はありますか?
したがって、私が探しているのは、一度に多くのチャットルームのログを処理できる、より効率的な方法です。writeStreams
可能であれば活用します。
理想的には、次の方法でデータを単純に書き込みたいと思います。
',' + chatobject + ']'
そして、次の書き込み操作では、「]」文字を削除して次の文字を書き込むことで、ファイルの末尾をトリムするだけです。txt ファイルに常に有効な JSON 文字列が残っています。
または、実際に .json ファイル自体に書き込み、解析を完全に回避することにより、より良い方法があります。
事前に感謝します。node.js に関して私の素朴さをお詫びします。