简体   繁体   English

如何通过 JavaScript - postMessage() 中的 web worker 传递可转移对象数组,即缓冲区以及不可转移的 object,即 json obj?

[英]How to pass array of transferable objects i.e. buffer along with non transferable object i.e. json obj via web worker in JavaScript - postMessage()?

So, here is what I am trying to achieve:所以,这就是我想要实现的目标:

  1. Call a specific function onMessage() in main thread from web-worker.在 web-worker 的主线程中调用特定的 function onMessage()。
  2. Passing an array of transferable objects ie Uint16Array buffer, Float32Array buffer etc.传递可传输对象数组,即 Uint16Array 缓冲区、Float32Array 缓冲区等。
  3. Along with all of above, I want to pass a simple boolean object or an integer or a string value while posting message.除了以上所有内容,我还想在发布消息时传递一个简单的 boolean object 或 integer 或一个字符串值。

For example:例如:

 const cornersArray = new Uint16Array(5000), // should go as Transferable object trailsArray = new Float32Array(7000); // should go as Transferable object const state = 1, // integer quality = 'High', // string isTracking = true; // boolean this.Worker.postMessage({ event: 'ShowTrails', data: { cornersArray: cornersArray, trailsArray: trailsArray, state: state, quality: quality, isTracking: isTracking } }, [cornersArray.buffer, trailsArray.buffer]);

So, onMessage() at main thread, this should call ShowTrails() and data should be passed as a parameter.因此,主线程的 onMessage() 应该调用 ShowTrails() 并且数据应该作为参数传递。 But this is throwing error that objects passed are not detachable, failing in postMessage().但这是抛出错误,传递的对象不可分离,在 postMessage() 中失败。

I am very noob in this, first time using web workers, please help me how to make this happen.我对此很菜鸟,第一次使用 web 工人,请帮助我如何实现这一目标。 I must be doing something wrong here while passing data.传递数据时我一定在这里做错了什么。

Thanks!谢谢!

You are not passing the transferrable buffer correctly.您没有正确传递可转移缓冲区。 Try this:尝试这个:

this.Worker.postMessage({
  event: 'ShowTrails',
  data: {
    cornersArray: cornersArray.buffer,
    trailsArray: trailsArray.buffer,
    state: state,
    quality: quality,
    isTracking: isTracking
  }
}, [cornersArray.buffer, trailsArray.buffer]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 有没有一种方法可以将对象数组作为可转移对象传递给网络工作者? - Is there a way to pass an array of objects to a web worker as a transferable object? Javascript:如何为 JSON 数组创建可传输的 Object - Javascript: How to create Transferable Object for JSON array Memory 泄漏:JavaScript - 使用可转移的 object 将数组缓冲区传递给 Web Worker,GC 不会启动 - Memory Leak: JavaScript - passing array buffer to Web Worker using transferable object, GC doesn't kick in Javascript:如何将数组缓冲区与视图一起使用以发送可转移对象 - Javascript: How to use an array buffer with views to send transferable Objects 如何将实际对象(即对对象的引用)传递给指令? - How to pass an actual object (i.e. reference to an object) to a directive? 如何将数组中的多个数据作为可传递对象传递 - how to pass multiple data in array as a transferable object Web Workers - JSON的可转换对象 - Web Workers - Transferable Objects for JSON Javascript函数就像对象,即“$”可以用作函数,例如$()以及对象$ - Javascript Function like Objects i.e. “$” can be used as a function e.g. $() as well as an object $ 如何将 JSON 数组从服务器发送到客户端,即(java 到 AJAX/Javascript)? - How to send JSON array from server to client, i.e. (java to AJAX/Javascript)? 使用 Web Worker 中的可转移对象 - Using transferable objects from a Web Worker
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM