vscode源码解析(五)- 多进程通信(一)

vscode是一个多进程架构的软件,进程间由于都是独立的,所以提供一个完整的功能时就需要进程之间的通信。
举个例子,我们安装一个插件时,处理UI交互的部分发生在Renderer Process中(比如安装按钮点击,以及检查适合的插件版本),但是实际的安装过程,是在Shared Process中处理的(比如下载插件包,以及解压插件),这里就涉及到Renderer Process怎么通知到Shared Process的问题了。
在这里插入图片描述

这里先提一下,vscode通信的一个特点,就是客户端-服务器模式,在上面的例子中,Renderer Process(渲染进程)就是客户端,它会发送请求;而Shared Process(共享进程)就是服务端,他会接收并响应。我们这里就直接看渲染进程和共享进程两边发送接收的源码吧,我们先简化代码进行理解,然后再由浅入深把全局说明了
我们可以发现,客户端这边用于发送请求的是IChannel,而服务端接收数据的是IChannelServer,channel就是进程间通信的核心概念之一,他帮我们实现了进程间功能的对应
代码文件路径是 src\vs\platform\extensionManagement\common\extensionManagementIpc.ts

// 渲染进程发送
export class ExtensionManagementChannelClient extends Disposable implements IExtensionManagementService {
   
	// 重点在构造方法中的channel,我们可以看到发送安装请求时候是调用this.channel.call
	constructor(private readonly channel: IChannel) {
   }
	install(vsix: URI, options?: InstallVSIXOptions): Promise<ILocalExtension> {
   
		return Promise.resolve(this.channel.call<ILocalExtension>('install', [vsix, options])).then(local => transformIncomingExtension(local, null));
	}
}

// 共享进程接收
// 重点在它实现了IServerChannel这个接口
export class ExtensionManagementChannel implements IServerChannel {
   
	<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值