AngularJS:如何获得系统远程?

请让我详细说明我的目标是什么

如何从运行Windows系统的Windows应用程序的Angular.js应用程序中获取远程桌面连接。 我的服务器是Google App Engine。

到目前为止我所想到的:

  1. Windows应用程序将拍摄屏幕截图并发送到Google App Engine Channel API。
  2. Google App Engine频道API会通知Angular应用并向其发送屏幕截图并进行显示。

这种方法的问题在于它非常昂贵且速度慢。

请求

请建议一些工具或api或制作屏幕共享应用程序的方法。

这不是您正在寻找的答案,而是以任何一种方式阅读。

TL;博士;

您要做的不是App Engine用例,您真的不应该使用App Engine来实现这种解决方案。

长版:

  • 正如您自己发现的那样,通道API将变得昂贵且对您尝试的操作而言变得缓慢。 这是因为通道API不是为了将大量数据流式传输到客户端。 这意味着定期向客户发送更新,例如实时聊天或新闻自动收报机的传入更新。 最佳情况是您只向客户端通知新内容,并且客户端从服务器请求此新内容。 因此,您可以将新屏幕截图的URL发送给客户端,客户端会请求它。 当您流式传输桌面或video时,这是非常不必要的,因为您希望使用这种流式传输的内容与您可以获得的更新一样多。 你也可以每隔几毫秒轮询一次。
  • 使用屏幕截图来共享桌面是一种特殊的疯狂,因为数据“流”无法正确压缩,因此会比以前更大。 通常远程桌面系统使用非常类似于video压缩算法的压缩,其中仅传输先前图片/帧的变化/差异,并且偶尔存在完整的关键帧。 更多数据意味着您的流中带宽更多,延迟更多。 至少尝试尽可能减少数据流是非常重要的。
  • 大多数App Engine应用程序的目标是允许扩展到数千个并行连接。 这是通过允许多个实例提供相同的内容并通过强制执行多个限制(例如前端的60秒请求截止时间/后端请求的10分钟,单个请求中的最大带宽使用等)来实现的,这会将大量任务分成小的请求然后可以由众多应用引擎实例提供服务。 相同的限制将不允许您为video或远程桌面流等内容创建长时间运行的连续数据流 。 如果您按照上面的建议每隔几毫秒进行轮询,则应用引擎会定期生成新实例,这会导致预热请求和进一步延迟。

但足够的不起作用,这是应该工作的一个例子:

  • 流服务器实际上是允许直接流式传输到客户端的服务器
  • 流服务器将其服务URL发布到您的应用引擎应用程序
  • 您的AngularJS应用程序从应用程序引擎应用程序请求流
  • App Engine告诉AngularJS应用程序上面的流服务器信息
  • 客户端直接从服务器请求流

这种方法省略了app引擎作为数据的代理 – 因此您不必担心流数据。 但它确实要求您的服务器可以直接在互联网上使用。

或者,有大量的应用程序/服务(twitch.tv来举个例子)可用,它允许桌面流式传输而无需编写单行代码。 这些流可以简单地嵌入到Angular应用程序中。 由于这不是软件建议,我不想在这里更深入地讨论这个问题。