malory

0.0.5 • Public • Published

malory

malory is a web worker manager, written in CoffeeScript which handles instantiation, messaging, and destruction of a collection of web workers.

Public API

For full code documentation, including private methods and objects, see malory.litcoffee

Constructor
maloryInstance = new malory(config)
malory.demand
maloryInstance.demand(demandworkerArguments).then (responseArray) ->
  # Iterate over the response array, perhaps coalescing the results 
malory.killAllWorkers
maloryInstance.killAllWorkers()

Example

Main Thread
workerConfig = [
  {
    workerUrl: "scripts/employee.js"
    name: "hrEmployee"
    initialDemand: "initialize worker"
    budgetedWorkers: 10
    officiallyOutOfMemory: "we are officially out of memory"
    workerArguments: {'memoryLimit': 700*1024 }
  },{
    workerUrl: "scripts/employee.js"
    name: "fieldEmployee"
    initialDemand: "initialize worker"
    budgetedWorkers: 10
    officiallyOutOfMemory: "we are officially out of memory"
    workerArguments: {'memoryLimit': 700*1024 }
  }
]
 
maloryInstance = new malory workerConfig
 
demand = 'bring me a gin and tonic'
workerArguments = {'ginBrand':'tanqueray'}
maloryInstance.demand(demandworkerArguments).then (drinkArray) ->
  for drinkin drinkArray
    console.log 'I am having gin and tonic number ' + i
The Web Worker (employee.coffee)
self.addEventListener "message"((e) ->
  
  # Extract Arguments 
  demand = e.data.demand
  workerArguments = e.data.workerArguments
  memoryLimit = workerArguments.memoryLimit
 
  # Decide Which Course of Action to Take 
  itemFetched = ''
  officiallyOutOfMemory = false
  switch demand
    when 'initialize worker' then officiallyOutOfMemory = Boolean(Math.round(Math.random()))
    when 'bring me a gin and tonic' then itemFetched = 'gin and tonic'
    when 'bring me a monte cristo sandwich' then itemFetched = 'monte cristo'
 
  # Respond to malory 
  if itemFetched then workerArguments.itemFetched = itemFetched
  returnMessage = {}
  returnMessage.demand = demand
  returnMessage.officiallyOutOfMemory = officiallyOutOfMemory
  returnMessage.workerArguments = workerArguments
  self.postMessage returnMessage
)
 

Requirements

Malory relies on the JavaScript Promise API. We suggest checking browser compatibility before use and use a polyfill if necessary

NPM Install

Get familiar with node.js if you haven't used it before, then

  • $ npm install malory

Contribute

This plugin requires Grunt ~0.4.0

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins.

  1. Clone or fork the source, github.com/glg/malory, then

  2. $ npm install

    gets you the dependencies

  3. $ grunt dev

    compiles and then starts a webserver on localhost:8100, and sets up a file watcher

Future Improvements

Package Sidebar

Install

npm i malory

Weekly Downloads

5

Version

0.0.5

License

MIT

Last publish

Collaborators

  • apcollier-glg
  • dgriffis
  • steve.quince