使用 Projector 远程访问 IDE

Read this post in other languages:

今天,我们要推出 Projector 的初始版本,这种工具和框架可以通过网络远程运行 JetBrains IDE 和 Swing 应用。

Projector Logo

如您所知,Swing 是 Java 的图形化微件工具箱。 当前的 JetBrains IDE 使用 Swing 绘制 UI。 其他基于 IntelliJ 的 IDE 也是如此,比如 Android Studio。

虽然一般情况下,JetBrains IDE 和 Swing 应用最好都是桌面应用程序,但在有些特殊情况下,比如瘦客户端,还是需要采用特殊的方法。 这就是 Projector 的用武之地。

Projector 是一种自托管技术,可在服务器上运行基于 IntelliJ 的 IDE 和基于 Swing 的应用,让您可以使用浏览器和本机应用从任何位置进行访问。

用例

有很多特殊情况可能需要您在服务器上运行 IDE。 其中一些问题在具有大型架构的大公司中尤为常见。 下面简单列举 Projector 特别适合解决的问题:

  • 运行时数据库附近运行代码以减少往返次数。
  • 高度安全的企业环境。
  • 真正的大型项目
  • 禁止源代码本地复制。
  • 用户硬件约束
  • 瘦客户端
  • 需要在 Windows 机器甚至是 ChromeOS 等非传统操作系统上的 GNU/Linux 环境中运行 IDE。
  • 需要在关闭计算机后让应用在服务器上继续运行。
  • 远程调试服务器端(devtest、devprod)。
  • 具有调试源和预配置 IDE 的 VM 或 Docker 映像
  • 需要远程访问的配置

请注意,Projector 不支持协作开发。 如果您需要协作工具,请尝试使用 Code With Me。 我们还在研究一个新的远程开发解决方案,把 Code With Me 和 Projector 的功能结合起来。 这将有助于进一步解决网络延迟问题。

开源

Projector 的各个特征均在开源许可证下发布。 对于想要通过这项技术构建自定义解决方案的公司来说,这一点非常重要。 我们使用的是三种最受欢迎的许可证:

  • 客户端:MIT License (Expat)
  • 服务器:GNU GPL v2.0 + Classpath Exception
  • Dockerfiles:Apache License 2.0

我们也邀请您通过 GitHub Pull Request 贡献新功能和进行错误修复。 您可以在下面找到指向特定项目的 GitHub 链接。

架构

Projector 是一款客户端-服务器软件。 IDE 在服务器上运行,可以通过网络连接到 IDE。 客户端和服务器之间的连接非常快速且轻巧。

您可以将其视为类似于 VNC 的远程桌面解决方案,但它仅显示 IDE 窗口,并且已针对基于 Java 的应用程序进行了微调,以实现最大吞吐量。

Projector 提供了用于设置服务器或客户端的多个选项。

客户端应用

您可以使用浏览器或本机应用连接到 IDE。 原生应用提供了更好的功能(如键盘快捷键),但仅适用于桌面操作系统。 目前,使用浏览器是移动设备的唯一选择,但我们也计划在将来为移动平台创建原生客户端。

Web 客户端

浏览器体验与使用交互式网站非常相似。 不同的是,全屏模式选项还将提供更类似于桌面的效果。

您可以通过更改 URL 参数来控制 Web 客户端的属性。 例如,在移动设备上,您可以将 "mobile" 参数添加到 URL 以启用叠加按钮,包括打开虚拟键盘的功能。

Web 客户端使用 HTML5 Canvas API 实现,支持与此 API 兼容的所有浏览器。 它已经在 Chrome/Chromium、Firefox 和 Safari 上进行了测试。

您不必在任何地方安装 Web 客户端:它已经包含在 Projector 的 Web 服务器部分。 您只需输入 URL。 所有代码均在 GitHub 上发布。

原生应用

您可以使用 macOS、Windows 和 Linux 的原生应用程序。 二进制文件可在此处获取,源代码在 GitHub 上发布。

除了 Dock/Taskbar 集成之类的预期好处,此应用还支持 Ctrl+W/Cmd+W 等键盘快捷键,这些快捷键通常在浏览器客户端中无法使用。

服务器端

Python 安装脚本

我们的安装脚本可以实现灵活的服务器端组件安装。 这是一个独立的发行版,目前仅适用于 GNU/Linux 主机。 您可以选择要安装的 IDE,以及其版本、安全选项等。

Docker 映像

Docker 是在云环境中运行 Projector 的最简单的方法。 我们的示例脚本可让您生成包含 JetBrains IDE 和 Projector 的 Docker 映像。 这使您可以在 Docker 可用的任何位置运行 IDE。 IDE 将无人值守并隔离运行,并且您不必在服务器上安装 X11。 映像是独立的。

我们不使用 DockerHub,而是使用自定义 Docker Registry 发布预构建的映像。 例如,这个代码段使您可以拉取 IntelliJ IDEA Community Edition:

docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c

IDE 插件

最后,您可以将插件直接安装到 IDE,而不必将服务器端元素部署到单独的服务器上。 有了这个插件,您的设备就是服务器。 同样,您可以在 GitHub 上找到源代码。

但是,该插件的隔离性较低,您可能会遇到操作系统的交互。 例如,我们无法在 macOS 上渲染全局菜单。

亲自上手

Projector 是一种技术,而不是最终用户解决方案。 您可以使用它来自定义架构,满足您的业务需求。 Ansible? 当然不错。 Kubernetes? 也没问题。

您可以构建任何需要的东西 – 只要您具有足够的技术专长。 代码是开源的,因此您可以随意更改,也可以做出贡献! 您可以在 GitHub 上找到更多信息以及最重要的服务器端代码。

Projector 仍然是一项非常年轻的技术,但我们相信它有潜力成为远程 IDE 访问的最佳解决方案之一。 我们很期待您的反馈。 您可以随时通过 YouTrackTwitter 联系我们。

— Projector 团队

image description

Discover more