Electron的通信封装

技术文档网 2021-04-26
通信机制
  • 共享数据:

    • Electron端:global下写入共享对象sharedObj
      global.sharedObj = {
          scaleConfig: scaleconfig,
          macAddress: mac
      }
      
    • 客户端:全局对象cb下封装了获得共享对象的通用方法。
       /*
        * return {Object}
         * */
      cb.electron.getSharedObject = function(key) {
        const sharedObj = Electron.remote.getGlobal('sharedObj');
            return key ? sharedObj[key] : sharedObj;
      }
      
  • 主进程和渲染进程通信:

    • Electron端:主进程监听名为electronic-order的事件, 回调里使用promise处理异步机制; ```javascript // 通用指令注册(类似ajax的通信机制) ipcMain.on('electronic-order', (event, orderID, order, data) => {

      console.log(`收到指令${order}, 参数为${data}, 开始执行...`)  // prints "ping"
      if (typeof  orderCollection[order] === 'function') {
          const p = new Promise(function (resolve) {
              orderCollection[order](resolve, data)
          })
          p.then(function (result) {
              console.log(`指令${order}已经执行, 结果: ${result}`)
              event.sender.send('electronic-order-reply', orderID, result)
          })
      }
      

      })


- 客户端:`html.jsx`封装了`cb.electron.sendOrder`方法,通过`order`名和调用时间戳生成唯一的id,以标识会话。具体使用方式类似于`proxy`。
```javascript
cb.electron.sendOrder = function(order, data) {
        return new Promise(function(resolve) {
          // 为事件生成唯一ID
          const orderID = new Date().getTime()
          // 换成生成器方式
          // const orderID = idIterator.next().value
          Electron.ipcRenderer.send('electronic-order', orderID, order, data)
          var callback = function(event, executedOrderID, result) {
             console.log(result)
             if (orderID === executedOrderID) {
                 Electron.ipcRenderer.removeListener('electronic-order-reply', callback)
                 resolve(result)
             }
          }
          Electron.ipcRenderer.addListener('electronic-order-reply', callback)
        })
}

使用生成器生成id序列, 累加记录且外界不可更改

function* IDGenerator(){
    let id = 0
    while(true){
        yield ++id
    }
}

const idIterator = IDGenerator()

相关文章

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod

随机推荐

  1. 硅谷互联网公司的开发流程

    开发流程包括这么几个阶段: OKR 的设立; 主项目及其子项目的确立; 每个子项目的生命周期; 主项目的生命周期; 收尾、维护、复盘。 第一点,OKR 的设立 所有项目的起始,都应该从 Ro

  2. RESTful-表述性状态转移风格

    REST英文全拼:Representational State Transfer 面向资源编程 资源指的就是一类数据 产品表->就是产品资源 最重要的是如何表示一个资源 地址即

  3. 稳定性思考

    产品功能线 0-1: 当系统从无到有的时候,首要考虑的是研发效率,功能快速迭代,满足快速增长的业务需求 1-10 系统已经搭建起来,此时考虑的是系统的稳定性。 可用性:1.隔离:区分出核心和非核心功能

  4. Supervisor守护队列发邮件

    安装 CentOS: yum -y install supervisor Debien/Ubuntu适用:apt-get install supervisor 配置 修改主配置文件:vim /et

  5. 安装libsodium,让服务器支持chacha20等加密方式

    用chacha20加密方式需要安装libsodium 注意:libsodium从1.0.15开始就废弃了aes-128-ctr yum install wget m2crypto git libsod