571
社区成员




作业要求:
VS Code 的全称是 Visual Studio Code,是一款开源的、免费的、跨平台的、高性能的、轻量级的代码编辑器。它在性能、语言支持、开源社区方面,都很出色。
一、需求分析
VS Code是一款轻量级的跨平台代码编辑器,但是在平台上存在各种插件,可以扩展出很多功能,满足用户多样化的需求。
目前,VSCode 远程开发支持下列三种主要模式:
Remote Development就是VS Code上的一款插件,它允许开发者将容器、远程计算机或 Windows Subsystem for Linux (WSL) 作为完整的开发环境。该插件使得用户能够:
在部署到的同一操作系统上进行开发,或者使用比本地机器更大、更快或更专业的硬件。
在不同的远程开发环境之间快速切换,并安全地进行更新,而不用担心影响用户的本地计算机。
从多台机器或多个位置访问现有的开发环境。
调试在其他地方运行的应用程序,例如客户站点或云中。
等等。
所有以上的功能,并不需要在本地开发环境有源代码。通过 VS Code Remote Development,轻松连接上远程环境,在本地进行开发。
远程开发扩展的名称是 Remote Development,它实际上是一个扩展包(Extension Pack),由 Remote-SSH、Remote-Containers、Remote-WSL 以及 Python 四个扩展组合而成,除了 Python 主要用于功能支持外,其他三个扩展功能是很明显的。
对于以上功能进行需求分析,从功能性需求、非功能性需求两方面分析。
功能性需求:
远程连接至服务器:用户通过 VS Code 远程连接插件,与远程服务器建立连接。
建立远程工作区:用户在本地的 VS Code 界面中打开远程工作区,编辑、调试和运行远程服务器上的代码。
远程调试:用户使用 VS Code 的调试功能,在远程服务器上进行代码运行和调试。
非功能性需求:
安全性:采用必要的措施保证远程连接的安全性,以防信息泄露
高可靠性:防止数据在传输过程中出现问题,比如数据传输失败或者传输了错误的数据
性能:用户在使用远程开发时应该感觉像在本地一样,因此远程服务器的响应速度要快。并且主要工作是在远程进行的,本地占用的资源应当尽可能少
二、逆向工程
为了更好地理解 Remote Development 功能是如何实现的,可以进行逆向工程,对代码库进行分析,以确定其实现细节。
首先,在查看代码前,先了解 VS Code 的插件开发机制和插件架构。VS Code 使用 Electron 作为底层框架,并使用 TypeScript 进行开发。其中,插件可以访问 VS Code API 来扩展编辑器的功能。
然后,阅读 Remote Development 插件的源代码并进行分析。Remote Development 插件包括客户端和服务器端两部分。客户端负责与用户交互,并将请求发送到远程服务器。服务器端则负责处理请求,并返回结果给客户端。
在客户端的实现中,可以看到 Remote Development 插件使用了 Visual Studio Code 中提供的 Terminal API 来创建终端窗口,通过 SSH 隧道将本地计算机的端口转发到远程计算机上,并使用 sshfs 和 rsync 等工具进行文件同步。客户端还支持在远程服务器上进行远程调试。对于容器方式的连接,插件使用了 Docker API 来管理容器。
在服务器端的实现中,Remote Development 插件实现了一个名为 "vscode-remote-server" 的 Node.js 应用程序。该程序会监听客户端的请求,并在收到请求后启动远程开发环境。同时,服务器端还支持通过 SSH 隧道将本地计算机的端口转发到远程计算机。
通过逆向工程的分析,可以更深入地了解 Remote Development 功能的实现细节。
VS Code Remote Development 的实现方法可以从其 GitHub 上的源代码库中获得。该项目使用 TypeScript 和 Node.js 编写,以下是一些重要的类和函数:
remoteExplorer.ts
remoteExplorer.ts 提供了与远程资源管理器相关的类和函数。其中最重要的类是 RemoteFileService 和 RemoteFileSystemProvider,它们分别处理文件服务和文件系统提供程序的功能。
tunnelModel.ts
tunnelModel.ts 定义了一个名为 TunnelModel 的类,它处理 SSH 隧道的创建和关闭。该类依赖于 sshHelper.ts 中提供的 SSH 命令行帮助程序。
environmentService.ts
environmentService.ts 提供了用于获取和设置 VS Code 环境变量的方法。该模块还包含 DataprotocolServer 类,该类充当数据协议服务器并接受来自客户端的请求和响应。
extensionHostProcessManager.ts
extensionHostProcessManager.ts 管理远程扩展主机进程的生命周期。在用户打开远程文件夹时,该组件会运行并启动扩展插件进程,在本地 VS Code 编辑器中显示远程扩展插件。
terminalServer.ts
terminalServer.ts 实现了终端服务器,允许用户通过 SSH 连接到远程主机的终端。TerminalProcess 类管理 SSH 进程和 shell 进程。
remoteAgentConnection.ts
remoteAgentConnection.ts 定义了 RemoteAgentConnection 类,该类充当与远程 VS Code 编辑器的通信管道。它使用 MessagePipe 协议在本地计算机和远程主机之间传递信息。
三、总结
需求分析,以及逆向工程,是软件设计、开发、测试和维护过程中的重要步骤,通过需求分析和逆向工程,我们能够更深入理解VS Code Remote Development的原理。通过分析需求和逆向工程,我们可以提高软禁质量和性能,确保软件的可靠性、安全性以及性能等,从而更好地达到软件用户的期望。
作者:109