scratch-vm之线程间通信(dispatch system)

web世界中的线程, 请参考MDN: Web Worker

整体架构

scratch-vm之线程间通信(dispatch system)_第1张图片

scratch-vm中实现了一套简单巧妙的“线程间”通信机制,帮助管理多个service,并承担service和caller的消息通信。CentralDispatch运行在主线程中,WorkerDispatch运行在Worker中。

CentralDispatch(全局唯一单例)

  • 作为service center,通过service的主动注册(setService(service))保存&管理多个service。
  • 作为worker center,addWorker(worker)作为入口,将worker增加到dispatch system。
  • 作为message broker,转发service与worker之间的消息和调用。

WorkerDispatch(每个worker会包含一个WorkerDispatch对象)

  • worker中引入WorkerDispatch,为worker提供了onmessage函数。
  • 将worker通过CentralDispatch.setService,将worker注册到CentralDispatch。

消息格式

DispatchCallMessage(函数调用)

  • responseId: 消息的序列id,当调用的函数结束时,会返回DispatchResponseMessage,会包含这个responseId,标识具体的某一个调用,封装在dispatch system内部,调用者不需要关心。
  • service: 目标service的名字
  • method: 目标service的函数名字
  • args: 参数

DispatchResponseMessage(调用返回)

  • responseId: 参考** DispatchCallMessage**
  • error: 如果为真时,表示调用错误信息
  • result: 如果为真时,表示调用结果

Dispatch System实现

你可能感兴趣的:(scratch-vm之线程间通信(dispatch system))