理解metamask的extension-port-stream包

extension-port-stream浏览器插件上的Runtime.Port对象 转成stream流对象.

继承于readable-stream[1]Duplex

该库比较简单:

stream实例对象上的_write调用了portInstance.postMessage方法 作为输出
监听portInstance.onMessage.addListener(内部调用了stream.push方法)作为输入

注意

  • @metamask/post-message-stream中的runtime是对应浏览器插件中的 chrome.runtime.sendMessagechrome.runtime.onMessage.addListener 这种适用于一次性发送和接收消息
  • extension-port-stream中是对应 portInstance = chrome.runtime.connect 中的 portInstance.postMessageportInstance.onMessage.addListener持久的双向通信通道,适用于需要持续交互的场景

  1. 1.readable-stream是Node.js官方出的库,旨在提供Streams模块的兼容性实现。允许开发者在不同的Node.js版本中使用一致的StreamsAPI,同时也为浏览器环境提供支持