2013-05-01 7 views
8

Googleハングアウト画面共有のような方法で動作するスクリーン共有アプリケーションを作成していますが、Googleトークプラグイン(スクリーン共有に使用)が子プロセスを生成して使用する方法を知りたい動的ポート範囲。Googleハングアウトデスクトップアプリケーションのフロー

私はGoogleのたまり場の画面共有を担当してgoogleTalkPlugin、見たとき、私は、ユーザーがインストールする必要がありますバックグラウンドで実行中のアプリケーションを作成し、彼らはここで説明する方法のようにブラウザで話し、http://www.codeproject.com/Articles/36517/Communicating-from-the-Browser-to-a-Desktop-Applic

しかしいます私は、実行中のプロセスがたくさんあることを知りました。新しいブラウザを開くたびに、そのブラウザ用の新しいトークプラグインが子サービスとして開始されます。ここで

は、いくつかのスナップショット

when I started safari

when I started firefox

があると私はgoogleTalkPluginで使用するポートに気づいたとき、私はそのダイナミックを知るようになりました!上記のリンクを見た場合、ブラウザのデスクトップ通信は静的ポートになります。

私は非常に知っていることに興味があります。どのように動的ポート番号を使用しますか?また、すべてのブラウザで子プロセスを作成する必要がありますか? または何か良い?

+0

あなたは何を意味するのかよく分かりません。なぜすべてのブラウザの子プロセスですか? –

+0

Googleトークプラグインがそうしているからです。画像が見えるように、ブラウザが動作しているときは、すべてのブラウザ用の新しい子プロセスが生成されます。 –

+4

私は、Chromeにはすべてのタブのプロセスがあるためだと思います。 –

答えて

2

ブラウザごとに個別の子プロセスがあるのは、Googleトークアプリケーションがブラウザプラグインとして実装されているからです。各ブラウザにはGoogleトークプラグインがインストールされており、他のブラウザ、プラグイン、またはそのサブプロセスについてはわかりません。各ブラウザは、インストールされているプラ​​グインを起動し、Eduardがコメントに記載したように、some plugins are started in a separate processを起動します。これはGoogleトークにとって特別な動作ではなく、ほとんどのプラグインで見られる動作です。アプリケーションをa browser pluginとして実装する場合、同じ動作になります。アプリケーションをブラウザのサブプロセスとして実行したくない場合は、ブラウザプラグインではなくスタンドアロンアプリケーションとして記述する必要があります。

サブプロセスを生成する方法の詳細については、read up on fork()を参照してください。インターネットの周りには、subprocessesという他にもたくさんの優れたリソースがあります。

その他の質問は動的ポート番号です。これを行う最も簡単な方法は、ポート0にバインドすることで、オペレーティングシステムによってランダムにオープンされたポートが割り当てられます。 getsockname()を使用して、どのポートを使用し終わったのかを調べることができます。クライアント/サーバーの状況で作業している場合は、クライアントがこれを行い、次に使用しているポートをサーバーに伝えることができます。

+0

このポート0のロジックは素晴らしいと思います。私は試してみる。 –