vscode server源码解析(三) - code server

本文详细介绍了Codeserver在远程开发中的核心作用,包括作为服务器提供IDE服务、用户安全登录、升级管理等功能,并着重剖析了启动过程、服务部署、中间件与路由设置以及VSCode内核的启动机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果初次接触code server,可以看我的code server介绍
如果对于整体架构还不清楚,可以看我的架构分析
在正式开始看代码前,我们再分析code server在整个远程开发方案中的作用。

Code Server在整个远程开发中的作用

1、code server最重要的作用就是server,也就是提供了服务器能力,能够将远程机器上的ide作为一个服务提供给外部,访问并使用,所以,code server本质是一个基于express框架,nodejs平台的轻量级服务器
2、code server提供了用户登录功能,使得ide即使作为一个服务可供外部访问,依旧可以保证安全性;且只有在用户登录后,才真正去加载vscode server内核代码
3、code server还提供了升级、代理、心跳检测等功能,当然这些都是基础的服务器功能,我们今天也不细说

我们今天就重点解析一下几个方面的代码
1、code server是如何启动的
2、code server是如何把ide作为一个服务提供出去的
3、code server的中间件和路由
4、code server如何启动vscode内核的

由于code server是一个基于express的框架,最好了解express框架再看,我之后也会补上相关文档,这里就不细说框架的知识了

Code Server程序入口

code server的入口文件是src/node/entry.ts,我们启动code server时候的命令是
./code-server --host 0.0.0.0 --port 9002
这个code-server实际就是个shell脚本,cat命令查看就能知道他本质上就是用node去启动程序,

# root其实code server的根目录,相当于`node .`,这样node会自动去package.json中找定义的入口文件
exec "$ROOT/lib/node" "$ROOT" "$@"

入口文件可以在package.json中看到定义

"main": "out/node/entry.js"

所以我们先从这个文件看,好吧,一来就是个难点,大家能看到有个判断isChild,这里我们就要叉出去说了,code server实际最终会启动两个nodejs进程
一个是父进程,他的逻辑非常简单,主要用于管理整个软件,启动子进程并且控制其生命周期;与其通信,比如接收子进程的日志输出,并打印到日志文件中
另一个是子进程,父进程启动后会去启动子进程,子进程才是真正的express框架的服务器,也是之后加载vscode server内核代码的进程

那么这里的逻辑就是,判断当前的进程是不是子进程,如果是父进程,就执行wrapper.start,就是我上面说的,去启动子进程,并与其建立通信
如果是子进程呢,先通过handshake和父进程建立通信,随后执行最重要的方法runCodeServer启动Code Server服务器

async function entry(): Promise<void> {
   
   // 判断父子进程
  if (isChild(wrapper)) {
   
    // 与父进程建立连接
    const args = await wrapper.handshake()
    wrapper.preventExit()
    // 真正地启动code server服务器
    const server = await runCodeServer(args)
    wrapper.onDispose(() => server.dispose())
    return
  }
  
  // 中间省略了部分内容,不影响当前分析
  
  // 父
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值