BOB(中国)官方入口-BOB真人官方

BOB综合网页版

BOB综合网页版 面试题:实现幼程序平台的并发双工Rpc通信

发布日期:2021-11-18 00:53    点击次数:56

前几天面试的时候遇到一道面试题BOB综合网页版,照样挺考验能力的。

题现在是云云的:

rpc是remoteprocedurecall,长途过程调用,比如一个进程调用另一个进程的某个手段。许众平台挑供的进程间通信机制都封装成了rpc的方法,比如electron的remote模块。

幼程序是双线程机制,两个线程之间要通信,挑供了postMessage和addListener的api。现在要在两个线程都会引入的common.js文件里实现rpc手段,声援并发的rpc通信。

达到云云的行使凶果:

const res = await rpc; 

这道题是有实在行使场景的题现在,比一些逻辑题和算法题更有有趣一些。

实现思路

两个线程之间是用postMessage的api传递新闻的:

在rpc手段里用postMessage传递要调用的手段名和参数 在addListener里收到调用的时候,调用api,然后始末postMessage返回终局或者舛讹

吾们先实现rpc手段,始末postMessage传递新闻BOB综合网页版,返回一个promise:

function rpc; } 

这个promise什么时候resolve或者reject呢?是在addListener收到新闻后。那就要先把它存首,等收到新闻再调用resolve或reject。

为了声援并发和区分众个调用通道,吾们添一个id。

let id = 0; function genId; } 

云云,就始末id标识了每一个长途调用请乞降与它有关的resolve、reject。

然后要处理addListener,由于是双工的通信,BOB综合网页版也就是通信的两者都会用到这段代码因此要区分一下是乞求照样相答。

addListener; 

处理乞求就是调用手段然后返回终局或者舛讹:

try {     const data = global[method]; } 

处理相答就是拿到并调用和id有关的resolve和reject:

const { resolve reject  } = channelMap.get; } 

通盘代码是云云的:

let id = 0; function genId; 

吾们实现了最最先的需要:

实现了rpc手段返回一个promise 声援并发的调用 两个线程都引入这个文件声援双工的通信

其实主要仔细的有两个点:

要增补一个id有关请乞降相答这在socket通信的时候也频繁用 resolve和reject能够保存下后续再调用。这在乞求作废比如axios的cancelToken的实现上也有行使

这两个点的行使场景照样比较众的。

总结

rpc是长途过程调用是跨进程、跨线程等场景下通信的常见封装方法。面试题是幼程序平台的双线程的场景在一个公共文件里实现双工的并发的rpc通信。

思路文中已经讲晓畅了主要要仔细的是promise的resolve和reject能够保存下后续调用始末增补id标识和有关一组乞求相答。

鸿蒙官方战略配相符共建——HarmonyOS技术社区 美国当局认为按“F12”作恶属于c走为首诉发现漏洞的记者 被无视的风险:打印机坦然防护的七点提出 SQLServer也能安放在Linux环境?SQLServer2019在CentOS7安放详解 什么?跳外都不晓畅的你还敢往面BAT! Windows11太难用?手把手教你将Windows11变得更顺遂