【问题标题】:Google hangout desktop application flowGoogle Hangout 桌面应用程序流程
【发布时间】:2013-05-01 12:38:25
【问题描述】:

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

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

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

这里有一些快照

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

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

【问题讨论】:

  • 不确定你的意思。为什么每个浏览器都有一个子进程?
  • 因为这就是 google talk 插件的作用。如您所见,每个浏览器都会在该浏览器运行时引发一个新的子进程。
  • 我认为这是因为 Chrome 对每个标签都有一个进程。
  • 你可以在上面的图片中看到 Firefox 和 safari 的过程呢?如果用户没有 chrome 怎么办?所以谷歌视频群聊不应该在那个系统中工作?事实并非如此。
  • Firefox 在单独的进程中启动一些插件:support.mozilla.org/en-US/kb/What%20is%20plugin-container Chrome 为每个选项卡启动一个新进程。这些是你看到的过程。环聊插件没有什么特别的。还有什么需要了解的吗?

标签: c networking hangout screensharing


【解决方案1】:

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

如果您想了解有关生成子进程的更多信息read up on fork()subprocesses 上的互联网上有很多其他好的资源。

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

【讨论】:

  • 这个端口 0 的逻辑听起来不错。我会试试看的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 2021-07-25
  • 2021-08-12
  • 1970-01-01
  • 2021-12-16
  • 2011-06-14
相关资源
最近更新 更多