zl程序教程

您现在的位置是:首页 >  后端

当前栏目

js的server worker创建子进程

JSserver进程 创建 Worker
2023-09-14 08:58:45 时间

类似nodejs的 child_process.fork()

// index.html 主线程

  function isClose(data){
    if(data === 0)
      return true;
  }
  var myWorker = new Worker("worker.js");

  myWorker.addEventListener('error',err=>{
    console.log( err);
  }, false);

  myWorker.addEventListener('message',msg=>{
    // 监听子线程发来的 数据
    console.log( msg.data);

    if( isClose(msg.data) ){
      // 干掉子进程
      myWorker.terminate();
    }
  }, false);

  setTimeout(function(){
    // 发更子进程的数据
     myWorker.postMessage('frok')
  }, 2000);
// worker.js 子线程

// 加载 fn.js 文件
importScripts('fn.js');

console.log(123);

// 向主线程发送 data
postMessage('over 123');

// 接收主线程发来的的数据
onmessage = (e)=>{
  check(e.data);
  console.log( e.data);
}

// fn.js

function check(data){
  console.log( data.constructor.name );
}

动态创建server.js文件

const workerJSString = `
// 接收主线程发来的的数据
onmessage = ({data})=>{
  // 向主线程发送data
  console.log(\`接收到主线程发来的数据: \${data}\`);
  postMessage(data ** 2);
}
`;
const workerBlob = new Blob([workerJSString], {
  type: "text/javascript"
});
const url = URL.createObjectURL(workerBlob);
const myWorker = new Worker(url);

// 监听子线程发来的 数据
myWorker.addEventListener("message", ({ data }) => {
  console.log(data); // 9
});

setTimeout(function () {
  // 向子进程的数据
  myWorker.postMessage(3);
}, 2000);