2012-05-02 5 views
2

私は、昨年.NETで小さなデーモンアプリケーションを作成しました。これは基本的にMinecraftサーバーを起動し、それを管理するためのWebベースのGUIを提供します。クラッシュした場合にプロセスを再起動するなど、他の機能を実行します。.NETでサブプロセスをサスペンドしますか?

最近、私たちの会社は、最後のプレイヤーが切断されたときに別のプレーヤーが参加するまでサーバーをシャットダウンするようにサーバーをセットアップしたフランス語のホスティング会社について聞いた。さて、私はこれがどのように可能であろうと考えていて、それに関する考えが何かを見たいと思っていました。私のデーモンはすでに何人のプレーヤーが接続されているかを知ることができるので、それは問題ではありません。私の擬似思考プロセスがある

...

    最終プレイヤーが
  • デーモンは、接続パケットデータと再起動を保存し、着信接続時に接続
  • 用のサーバポートで待機引き継ぎサーバーから切断
  • サーバーサブプロセス
  • Minecraft Javaプロセスに保存接続を渡す

最後のステップをどのように処理するかを実際には分かりませんが、それが私が思いついた最善の解決策です。どのような考えや提案ですか?

答えて

0

多分あなたは一度に接続したいプレイヤーが多いでしょうから、あなたはそのアプローチに問題があるかもしれません(私はあなたのサーバーが瞬時に起動しないと思っています)。

デーモンは接続を待ち、キューや何かに入れて、サーバが起動し、それから接続(または接続パケットなど)を送ります。サーバーが起動し、すべての接続が転送された後、デーモンを停止(a.k.a停止またはポートの詰まりを止める)してください。

これが役に立ちます。

0

TCPネットワーク接続を「保存」して別のプロセスにリダイレクトすることはできません。これを実装する唯一の方法は、すべての接続を受け入れ、すべてのデータを別のポートで実行されているサーバーに送信するプロキシサーバーとして機能させることです。

このような設定では、最初の着信接続時にサーバーを起動できます。

他の唯一の解決策は、ネットワークインターフェースへの直接読み取りアクセスを必要とする。 Wireshark/Pcapライブラリで使用されます。彼らは、TCP SYNパケットを検出し、入ってくるときにサーバを起動することができます。

+0

OO世界では、接続を「保存」できます。私はそれらを使用してからしばらくしていますが、java.net.ServerSocketとjava.net.Socketはそのための具体的な実装です。 –

+0

@vlad:しかし、あなたは他のプロセスとの接続を手渡すことはできません。それがブレットのアイデアの要点でした。 – Robert

関連する問題