実際にネットワークポートであるファイルを作成します。

実際にネットワークポートであるファイルを作成します。

クラスタで実行されるプログラムがあり、プログラムの出力が私が指定したログファイルに書き込まれます。ところで、ファイルに書き込むのではなく、Node.jsなどを利用して読めるようにネットワークポートに書きたいと思います。

たとえば、/dev/127.0.0.1:3000行でファイルを指定できるようにしたいとします。

現在私はNode.jsを使用してログファイルを監視し、データが変更された場合はすべてのデータを再読み込みし、新しいデータと古いデータを比較して追加された内容を確認して処理します。しかし、これはかなり非効率的です。

ベストアンサー1

プログラムがファイルを再生成せずに(ファイルを開いて)書き込む場合は、ファイルをパイプとして生成してこれを実行できます。

mkfifo potato.log

ファイルに書き込むのと同じように、パイプにメッセージを送信できます。

$ # This is the logging process:
$ echo "Warning!" > potato.log

そして読んでください:

$ # This is the listener process:
$ cat potato.log
Warning!

実際にTCPソケットに渡すには、次のようにします。

$ socat PIPE:potato.log TCP:localhost:3000

非常に強力ではないかもしれませんが、socat(リモートTCPとの切断を処理する)の代わりにプログラムを書くことで、より強力なタスクを実行できます。

(ソケットベースのロギングの基本的なサポートを得るためにプログラムを変更できる場合は、これはすべて必要ありません。)

おすすめ記事