8

我正在创建一个屏幕共享应用程序,它的工作方式与 Google Hangout 屏幕共享类似,我想知道 Google Talk 插件(用于屏幕共享)如何生成子进程并使用动态端口范围。

我正在创建一个用户必须安装的后台运行应用程序,它与浏览器的对话就像他们在这里描述的那样,http://www.codeproject.com/Articles/36517/Communicating-from-the-Browser-to-a -桌面应用

但是当我查看负责 google hangout 屏幕共享的 googleTalkPlugin 时,我看到有很多进程在运行,并且每当我打开一个新浏览器时,该浏览器的一个新谈话插件就会作为子服务启动。

这是一些快照

当我开始野生动物园

当我开始火狐

当我注意到 googleTalkPlugin 使用的端口时,我才知道它的动态!如果您看到上面的链接,浏览器桌面通信是在静态端口上。

我很想知道如何使用动态端口号?另外,我应该为每个浏览器创建子进程吗?或者更好的东西?

4

1 回答 1

2

每个浏览器都有一个单独的子进程的原因是 Google Talk 应用程序是作为浏览器插件实现的。每个浏览器都安装了 Google Talk 插件,并且不知道其他浏览器、它们的插件或它们的子进程。每个浏览器都会启动它已经安装的插件,正如 Eduard 在评论中提到的,一些插件是在一个单独的进程中启动的。这不是 Google Talk 的特殊行为,它是您在大多数插件中都会看到的行为。如果您将应用程序实现为浏览器插件,您将具有相同的行为。如果您不希望您的应用程序作为浏览器的子进程运行,那么您需要将其编写为独立的应用程序,而不是浏览器插件。

如果您想了解有关生成子进程的更多信息,请阅读 fork()。互联网上有很多其他关于子流程的好资源。

您的另一个问题是关于动态端口号。最简单的方法是绑定到端口 0,操作系统会为您分配一个随机打开的端口。然后,您可以使用getsockname()找出您最终使用的端口。如果您正在处理客户端/服务器情况,您可以让客户端执行此操作,然后告诉服务器它正在使用哪个端口。

于 2013-08-02T19:25:31.647 回答