Highway.js
A flexible pub/sub event emitter for web-worker (and more) cross-communication with fallback support. Worker can be anything: an Iframe, a WebWorker, a ServiceWorker, a Node WS Server.
Usage
Include Highway.js on both client side and worker side.
Import Highway and a Proxy you want to use, both in client side and worker side:
Initialize:
// Client sideconst Host = selfWorker ? 'worker.bundle.js' : selfselfHW = selfHW || Host// Worker sideselfHW = selfHW || self
Fallback when there is no worker support:
// On client sideif !selfWorker const script = document script documentbody
In most cases you want to initialize client side stuff after the worker is loaded. Use your own event for this. For example you need your data model from the backend before rendering the site.
// Client sideHW// Worker sideHW
API
HW.sub(string eventName, callable callback [,boolean one = false])
Subscribe to an event.
HWHW
HW.pub(eventName[, customData, customState])
Publish an event.
HWHWHW
HW.one(eventName, callback)
Subscribe to an event, unsubscribe once it is called. It's a shorthand for
HW.sub(eventName, callback, true)
HW
HW.exe(callable)
Execute a function on the other side. Your function will be executed within self
context.
HW
Disable exe
HWAllowExe = false
You might want to disable this if you're using Node as you backend for example. Function is passed over as a string and it's executed by
eval
which is a high security risk.
off
Unsubscribe from an event.
// Unsubscribe from ALL events associated with MyOwnEventHW// Unsubscribe only a specific callbackHW// Unsubscribe from ALL events associated with MyOwnEvent, even the deep ones. eg: MyOwnEvent->DeepEvent tooHW
destroy
Destroy the Highway instance.
HW
Proxies
- EventEmitter: for everything which uses the node EventEmitter interface (like socket.io)
- Iframe
- WebWorker: for both Web and Service Workers