加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular 2网络工作者

发布时间:2020-12-17 08:51:48 所属栏目:安全 来源:网络整理
导读:我能找到关于角度2的webworkers的所有文章和指南都集中在使整个应用程序在weborker中运行.是否可以利用网络工作者创建一个服务? 按照网络工作者的经典例子,有人可以告诉我如何使用网络工作者创建一个计算数字因子的服务吗? 新版本 根据您可以找到的解决方
我能找到关于角度2的webworkers的所有文章和指南都集中在使整个应用程序在weborker中运行.是否可以利用网络工作者创建一个服务?

按照网络工作者的经典例子,有人可以告诉我如何使用网络工作者创建一个计算数字因子的服务吗?

新版本

根据您可以找到的解决方案here,我构建了一个使用WebWorker完成其任务的简单类.

你需要3个文件来拥有一个工作的工人.

> file-loader.d.ts – 需要加载WebWorker文件

declare module "file-loader?name=[name].js!*" {
  const value: string;
  export = value;
}

> background-worker.ts – 在您的应用程序中可用的类

import * as workerPath from "file-loader?name=[name].js!./web-worker-example";


class BackgroundWorker {

    constructor() {
        let worker = new Worker(workerPath);
        worker.onmessage = this.handleMessage;
        worker.postMessage('Caller: Help Me for background Work');

        // Message content can contain only Javascript Objects
        //
        // For Documentation:
        // https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage
        //
    }

    private handleMessage( this: Worker,message: MessageEvent ) {

        console.log( message.data );

        switch( message.data ) {
        case 'Worker: Working':
            // ... Something To Do ...
            break;
        case 'Worker: Ok,I will Do It':
            // ... Something To Do ...
            break;
        case 'Worker: No,I can not':
            // ... Something To Do ...
            break;
        case 'Worker: Done':
            this.terminate();
            break;
        }
    }
}

> web-worker-example.ts

// ****************************************************************** Worker Bridge
// self is a keyword: Reference to this Worker 
self.onmessage = bridge;

function bridge( message: MessageEvent ) {
    HandleWork( message.data );
    CallBack('Done');
    // use:
    //       self.close();
    // if you need to terminate worker from Worker Environment.
}

function CallBack( message: string ) {
    self.postMessage('Worker: ' + message,undefined);
}

// ****************************************************************** Worker Body
function HandleWork( workTask: string ) {
    if( workTask == 'Caller: Help Me for background Work' ) {
        CallBack('Ok,I will Do It');

        DoVeryComplexWork();
        return;
    }

    CallBack('No,I can not');
}

function DoVeryComplexWork() {

    // ... Something To Do ...

    // Example:
    for( let i: number = 0; i < 1000000000; i++ ) {
        if( i % 100000000 == 0 ) {
            CallBack('Working');
        }
    }
}

要启动Worker,只需实例化worker new BackgroundWorker()并查看控制台.

旧版

我遇到了同样的问题,并通过构建扩展一类WebWorker的服务来解决它.
在实践中,服务工作通过向WebWorker传递两个东西,数据和一个详细说明数据的函数.

我在GitHub上发布了一个例子.所有必需的逻辑都在以下两个文件中.

fibonacci-worker.service.ts

worker.ts

看一下app.component.ts的调用方法.

问候.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读