Node.js で小さな独自のゲーム サーバー マネージャーを作成しています。現在、次の方法でスポーンしてゲームを実行しますchild_process
。
var server = spawn(cmd, args, { cwd: 'something' });
マネージャーが実行し続ける限り、コマンドをパイプして、必要に応じて子を処理できます。ただし、マネージャーがクラッシュしたり閉じたりする可能性を考慮してください。 次に、以前に生成された子プロセス (マネージャーがダウンしている間も実行されていた) に再接続するにはどうすればよいですか? pidfile を保存して、pid に基づいて再接続を試みることができます。child_process
しかし、子のオブジェクトにアクセスできるオブジェクトを取得する方法がわかりませんstdio
。
これが回復可能であることを本当に望んでいます。どんな助けでも大歓迎です、ありがとう!
注: ゲーム サーバーはプロプライエタリです。たとえば、Minecraft、ソース DS などがあります。サーバー ソースにアクセスできないと仮定します。
編集
ノードからいくつかのソースコードを読み取った後、オプションで , というプロパティを指定した場合、またはソケットを開く必要child_process
があるように見えます。( 428~496行を参照)。したがって、問題は、spawn が実際にspawn を実行するのをどのように停止し、代わりに指定された pid と渡したストリームに基づいてその値を設定するかです。(その fd はパイプとして作成されているので、どちらが機能するかを実行することで取得できます。)stdinStream
stdoutStream
stderrStream
stdinStream
fs.createWriteStream('/proc/PID/fd/0');