jfet97 / Aww
Licence: mit
Async Iterables Interfaces for Web Workers
Stars: ✭ 113
Programming Languages
javascript
184084 projects - #8 most used programming language
es6
455 projects
Labels
Projects that are alternatives of or similar to Aww
Nginx Haskell Module
Nginx module for binding Haskell code in configuration files for great good!
Stars: ✭ 99 (-12.39%)
Mutual labels: async
Fsharp.control.fusiontasks
F# Async workflow <--> .NET Task/ValueTask easy seamless interoperability library.
Stars: ✭ 101 (-10.62%)
Mutual labels: async
Open.channelextensions
A set of extensions for optimizing/simplifying System.Threading.Channels usage.
Stars: ✭ 106 (-6.19%)
Mutual labels: async
Meinheld
Meinheld is a high performance asynchronous WSGI Web Server (based on picoev)
Stars: ✭ 1,339 (+1084.96%)
Mutual labels: async
Ws Machine
WS-Machine is a websocket finite state machine for client websocket connections (Go)
Stars: ✭ 110 (-2.65%)
Mutual labels: async
Acme
Async ACME library written in PHP based on the Amp concurrency framework.
Stars: ✭ 102 (-9.73%)
Mutual labels: async
Datastore
🐹 Bloat free and flexible interface for data store and database access.
Stars: ✭ 99 (-12.39%)
Mutual labels: async
Dapeng Soa
A lightweight, high performance micro-service framework
Stars: ✭ 101 (-10.62%)
Mutual labels: async
Governor
A rate-limiting library for Rust (formerly ratelimit_meter)
Stars: ✭ 99 (-12.39%)
Mutual labels: async
Aiometer
A Python concurrency scheduling library, compatible with asyncio and trio.
Stars: ✭ 110 (-2.65%)
Mutual labels: async
Symfony Async Kernel
[Deprecated] Symfony Async Kernel adpater
Stars: ✭ 111 (-1.77%)
Mutual labels: async
Babel Plugin Mobx Deep Action
Reduces `action` and `runInAction` boilerplates
Stars: ✭ 110 (-2.65%)
Mutual labels: async
aww
Async Iterables Interfaces for Web Workers
This is a proof of concept library that enables async iteration with web workers. Errors handling is not yet supported.
npm i -S aww
Do not use the postMessage
method of my wrappers while you are async iterating: use the reply
method instead.
How to iterate over the invoker's incoming data (from the worker perspective)
worker.js
import { AISource } from 'aww';
const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));
;(async () => {
// will handle onmessage events and other stuff
// it's an async iterable
const source = new AISource();
for await(const msg of source) {
console.log(`${msg.data} received inside worker`);
await delay(2000, msg); // fake long task
// next messages from the main will be handled by the async iteration
// no sense making this awaitable
// DO NOT USE postMessage!
source.reply("It's all good from worker!");
}
})();
main.js
import { AIWorker } from 'aww';
const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));
;(async () => {
const myWorker = new AIWorker(new Worker('./worker.js'));
let i = 0;
while(true) {
await delay(1000);
// you can await the response from the worker, but it is not mandatory
await myWorker.postMessage(i++).then(({data}) => console.log(data));
/*
alternative syntax
const { data } = await myWorker.postMessage(i++);
console.log(data);
*/
}
})();
How to iterate over the worker's incoming data (from the invoker perspective)
main.js
import { AIWorker } from 'aww';
const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));
;(async () => {
const myWorker = new AIWorker(new Worker('./worker.js'));
// will handle onmessage events and other stuff
// it's an async iterable
for await(const msg of myWorker) {
console.log(`${msg.data} received inside main`);
await delay(2000, msg); // fake long task
// next messages from the main will be handled by the async iteration
// no sense making this awaitable
// DO NOT USE postMessage!
myWorker.reply("It's all good from main!");
}
})();
worker.js
import { AISource } from 'aww';
const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));
;(async () => {
const source = new AISource();
let i = 0;
while(true) {
await delay(1000);
// you can await the response from the main, but it is not mandatory
await source.postMessage(i++).then(({data}) => console.log(data));
/*
alternative syntax
const { data } = await source.postMessage(i++);
console.log(data);
*/
}
})();
How to iterate over both at the same time
main.js
import { AIWorker } from 'aww';
const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));
;(async () => {
const myWorker = new AIWorker(new Worker('./worker.js'));
// start the iteration posting a message
// because both the main and the worker are waiting to start the iteration
// not awaitable because the subsequent async iteration will handle worker's messages
// DO NOT USE postMessage!
myWorker.reply("Please start!");
for await(const msg of myWorker) {
console.log(`${msg.data} received inside main`);
await delay(1000, msg); // fake long task
// next messages from the main will be handled by the async iteration
// no sense making this awaitable
// DO NOT USE postMessage!
myWorker.reply("It's all good from main!");
}
})();
worker.js
import { AISource } from 'aww';
const delay = (ms, v) => new Promise(res => setTimeout(res, ms, v));
;(async () => {
const source = new AISource();
for await(const msg of source) {
console.log(`${msg.data} received inside worker`);
await delay(2000, msg); // fake long task
// next messages from the main will be handled by the async iteration
// no sense making this awaitable
// DO NOT USE postMessage!
source.reply("It's all good from worker!");
}
})();
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].