2011-02-01 13 views
5

私はオーディオストリーミングサーバーのセットを開発しました。それらはすべてTwistedを使用しています。これらはPythonに含まれています。彼らはうまくいきますが、実行中のサーバーにバグが見つかったり、サーバーに何かを追加したい場合は、問題を止めて起動する必要があります。 HTTPサーバーとは異なり、オーディオストリーミングサーバーはいつでも再起動しても問題ありません。ストリーミングサーバーを再起動すると、ユーザーに切断が発生する可能性があります。Pythonでホットコードスワップを実行できるTwistedサーバーの構築方法は?

私はマンホール(Twistedサーバーのためのsshサービス、何かをするためにログインしてPythonコードをコンソールに入力することができます)をセットアップしようとしました。コンソールに接続し、Pythonモジュールをすぐに再読み込みします。時には動作しますが、制御するのは難しいです。サーバーに古いクラスのインスタンスがいくつあるか分からず、一部のインスタンスに到達するのが難しく、クラスの関係が非常に複雑になります。また、状況によってはうまくいくかもしれませんが、実際にはサーバーを再起動する必要があります。たとえば、セレクターリアクターでサーバーを実行していて、epoll reactorで実行したい場合は、再起動する必要があります。もう1つの例では、メモリ使用量が高すぎる場合は、再起動する必要があります。

このようなシステムを構築するには、私の頭の中に考えがあります。私は、それらの接続とプロセスのデータを別のプロセスに引き渡すことが可能だと考えています。例:

私たちはBroadcastingという名前のサーバーを持っており、実行中のインスタンスはrev.123の下にあり、rev.124に置き換えたいと考えています。

Broadcasting rev.123 is running.... 
Startup Broadcasting rev.124 .... 
Broadcasting rev.124 is stand by 
Hand over connections from instance of rev.123 to instance of rev.124 
Stop Broadcasting rev. 123 instance 

これは可能ですか?プロセスにバインドされたソケットハンドルの存続期間はまったく分かりません。作成者プロセスが終了すると、プロセスによって作成されたソケットが閉じられると思いますが、わかりません。可能であれば、この種のホットコードスワップメカニズムを設計するためのガイドラインや記事はありますか?そして、私はTwistedがすでに完了しているために何かを達成できるものがありますか?

ありがとうございました。

+0

私はLinux CentOSの下でこれらのサーバーをすべて実行しています。 –

答えて

関連する問題