2013-05-01 7 views
8

Ich erstelle eine Screensharing-Anwendung, die ähnlich funktioniert wie Google Hangout Screen Shares, und ich würde gerne wissen, wie das Google Talk-Plugin (für Screen Shares verwendet) untergeordnete Prozesse hervorbringt ein dynamischer Portbereich.Google Hangout-Desktop-Anwendungsfluss

ich einen Hintergrund erschaffe Anwendung ausgeführt wird, den Benutzer installiert werden muss, und die Gespräche mit Browser wie, wie sie hier beschreiben, http://www.codeproject.com/Articles/36517/Communicating-from-the-Browser-to-a-Desktop-Applic

Aber wenn ich mich googleTalkPlugin suchen, die für Google Hangout Bildschirmfreigabe verantwortlich ist, Ich habe gesehen, dass viele Prozesse laufen, und wenn ich einen neuen Browser öffne, wird ein neues Talk-Plugin für diesen Browser als Child Service gestartet.

Hier sind einige Schnappschüsse

when I started safari

when I started firefox

und wenn ich den Hafen von googleTalkPlugin verwendet bemerkte, kam ich seine Dynamik wissen! Wenn Sie den obigen Link gesehen haben, befindet sich die Browser Desktop-Kommunikation im statischen Port.

Ich bin sehr interessiert zu wissen, wie verwende ich dynamische Portnummern? Soll ich für jeden Browser einen untergeordneten Prozess erstellen? Oder etwas besseres?

+0

Nicht sicher, was Sie meinen. Warum ein Kindprozess für jeden Browser? –

+0

, denn das ist, was Google Talk Plugin tut. Wie Sie Bilder sehen können, wird ein neuer untergeordneter Prozess für jeden Browser ausgelöst, wenn dieser Browser ausgeführt wird. –

+4

Ich denke, das liegt daran, dass Chrome für jede Registerkarte einen Prozess hat. –

Antwort

2

Der Grund, dass es für jeden Browser einen separaten untergeordneten Prozess gibt, ist, dass die Google Talk-Anwendung als Browser-Plug-in implementiert ist. Jeder Browser hat ein Google Talk-Plugin installiert und kennt die anderen Browser, deren Plugins oder deren Unterprozesse nicht. Jeder Browser startet die installierten Plugins und, wie Eduard in den Kommentaren erwähnt, some plugins are started in a separate process. Dies ist kein besonderes Verhalten von Google Talk. Es ist ein Verhalten, das Sie bei den meisten Plugins sehen. Wenn Sie Ihre Anwendung als a browser plugin implementieren, haben Sie das gleiche Verhalten. Wenn Sie nicht möchten, dass Ihre Anwendung als Unterprozess eines Browsers ausgeführt wird, müssen Sie sie als eigenständige Anwendung und nicht als Browser-Plugin schreiben.

Wenn Sie mehr über das Erzeugen von Teilprozessen erfahren möchten, geben Sie read up on fork() ein. Es gibt viele andere gute Ressourcen rund um das Internet unter subprocesses.

Ihre andere Frage betrifft dynamische Portnummern. Der einfachste Weg, dies zu tun, ist an Port 0 zu binden, und Sie erhalten vom Betriebssystem einen zufälligen offenen Port zugewiesen. Sie können dann verwenden, um herauszufinden, mit welchem ​​Port Sie gelandet sind. Wenn Sie mit einer Client/Server-Situation arbeiten, können Sie dies dem Client überlassen und dann dem Server mitteilen, welchen Port er verwendet.

+0

Diese Port 0 Logik klingt gut. Ich werde es ausprobieren. –