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

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

整体架构

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实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容