2013-05-01 15 views
8

Tworzę aplikację do udostępniania ekranu, która działa w podobny sposób, jak udział w ekranach Google Hangout, i chciałabym wiedzieć, w jaki sposób wtyczka Google Talk (używana do udostępniania ekranów) spawnuje procesy potomne i używa dynamiczny zakres portów.Przepływ aplikacji Google Hangout na komputery stacjonarne

tworzę tło uruchomionej aplikacji, które użytkownik będzie musiał zainstalować i który mówi z przeglądarką jak w jaki sposób opisać tutaj, http://www.codeproject.com/Articles/36517/Communicating-from-the-Browser-to-a-Desktop-Applic

Ale kiedy patrzę na googleTalkPlugin, który jest odpowiedzialny za google hangout dzielenia ekranu, Zauważyłem, że wiele procesów jest uruchomionych, a gdy tylko otworzę nową przeglądarkę, uruchomi się nowa wtyczka dyskusji dla tej przeglądarki, jako usługa dla dzieci.

Oto kilka migawek

when I started safari

when I started firefox

i kiedy zauważyłem port używany przez googleTalkPlugin, poznałem jej dynamiczny! Jeśli zobaczyłeś powyższy link, komunikacja z Pulpitem przeglądarki znajduje się na porcie statycznym.

Jestem bardzo zainteresowany poznaniem, jak używać dynamicznych numerów portów? Ponadto, czy powinienem utworzyć proces potomny dla każdej przeglądarki? Albo coś lepszego?

+0

Nie jesteś pewien co masz na myśli. Dlaczego proces potomny działa dla każdej przeglądarki? –

+0

ponieważ to robi wtyczka Google Talk. Jak widać, nowy proces potomny dla każdej przeglądarki jest podnoszony, gdy przeglądarka jest uruchomiona. –

+4

Myślę, że to dlatego, że Chrome ma proces dla każdej karty. –

Odpowiedz

2

Powodem oddzielnej procedury podrzędnej dla każdej przeglądarki jest to, że aplikacja Google Talk jest zaimplementowana jako wtyczka przeglądarki. Każda przeglądarka ma zainstalowaną wtyczkę Google Talk i nie wie o innych przeglądarkach, wtyczkach lub podprocesach. Każda przeglądarka uruchomi zainstalowane wtyczki i, jak wspomniał Eduard w komentarzach, some plugins are started in a separate process. Nie jest to zachowanie, które wyróżnia Google Talk, jest to zachowanie, które widać przy większości wtyczek. Jeśli zaimplementujesz swoją aplikację jako a browser plugin, będziesz zachowywać się tak samo. Jeśli nie chcesz, aby aplikacja działała jako podproces przeglądarki, musisz napisać ją jako samodzielną aplikację, a nie jako wtyczkę do przeglądarki.

Jeśli chcesz dowiedzieć się więcej o spawnowaniu podprocesów read up on fork(). Istnieje wiele innych dobrych zasobów w Internecie pod numerem subprocesses.

Twoje drugie pytanie dotyczy dynamicznych numerów portów. Najłatwiej to zrobić, aby połączyć się z portem 0, a system operacyjny będzie miał przypisany losowy port otwarty. Następnie możesz użyć numeru getsockname(), aby dowiedzieć się, z jakiego portu skończyłeś. Jeśli pracujesz z sytuacją klient/serwer, możesz zlecić to klientowi, a następnie poinformować serwer, z którego portu korzysta.

+0

Ta logika portu 0 brzmi nieźle. Wypróbuję. –