Socket
Socket
Sign inDemoInstall

broadcast-channel

Package Overview
Dependencies
8
Maintainers
1
Versions
98
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    broadcast-channel

A BroadcastChannel implementation that works with new browsers, older browsers and Node.js


Version published
Maintainers
1
Install size
2.63 MB
Created

Package description

What is broadcast-channel?

The broadcast-channel npm package allows different browser tabs, iframes, web workers, and node.js processes to communicate with each other. It uses various methods like IndexedDB, local storage, or native events to create a channel that can be used to broadcast messages across different contexts running on the same machine.

What are broadcast-channel's main functionalities?

Creating a Broadcast Channel

This code sample demonstrates how to import the BroadcastChannel class from the package and create a new channel named 'my-channel'.

const { BroadcastChannel } = require('broadcast-channel');
const channel = new BroadcastChannel('my-channel');

Sending a Message

This code sample shows how to send a message ('Hello World') through the channel to other listening contexts.

channel.postMessage('Hello World');

Receiving Messages

This code sample sets up an event listener to receive messages sent to the channel and logs them to the console.

channel.onmessage = (message) => console.log('Received:', message);

Closing a Channel

This code sample demonstrates how to close the channel when it is no longer needed to free up resources.

channel.close();

Other packages similar to broadcast-channel

Readme

Source

BroadcastChannel

A BroadcastChannel that works in old browsers, new browsers, WebWorkers and NodeJs

follow on Twitter



A BroadcastChannel allows simple communication between browsing contexts with the same origin or different NodeJs processes.

This implementation works with old browsers, new browsers, WebWorkers and NodeJs. You can use it to send messages between multiple browser-tabs, iframes, WebWorkers and NodeJs-processes.

This behaves similar to the BroadcastChannel-API which is currently not featured in all browsers.

Methods:

Depending in which environment this is used, a proper method is automatically selected to ensure it always works.

MethodUsed inDescription
NativeModern BrowsersIf the browser supports the BroadcastChannel-API, this method will be used because it is the fastest
IndexedDBBrowsers with WebWorkersIf there is no native BroadcastChannel support, the IndexedDB method is used because it supports messaging between browser-tabs, iframes and WebWorkers
LocalStorageOlder BrowsersIn older browsers that do not support IndexedDb, a localstorage-method is used
SocketsNodeJsIn NodeJs the communication is handled by sockets that send each other messages

Usage

This API behaves similar to the javascript-standard.

npm install --save broadcast-channel

Create a channel in one tab/process and send a message.

const BroadcastChannel = require('broadcast-channel');
const channel = new BroadcastChannel('foobar');
channel.postMessage('I am not alone');

Create a channel with the same name in another tab/process and recieve messages.

const BroadcastChannel = require('broadcast-channel');
const channel = new BroadcastChannel('foobar');
channel.onmessage = msg => console.dir(msg);
// > 'I am not alone'

Close the channel if you do not need it anymore.

channel.close();

Set options when creating a channel (optional):

const options = {
    type: 'localstorage', // (optional) enforce a type, oneOf['native', 'idb', 'localstorage', 'node']
    webWorkerSupport: true; // (optional) set this to false if you know that your channel will never be used in a WebWorker (increases performance)
};
const channel = new BroadcastChannel('foobar', options);

Create a typed channel in typescript:

import BroadcastChannel from 'broadcast-channel';
declare type Message = {
  foo: string;
};
const channel: BroadcastChannel<Message> = new BroadcastChannel('foobar');
channel.postMessage({
  foo: 'bar'
});

What this is

This module is optimised for:

  • low latency: When you postMessage on one channel, it should take as low as possible time until other channels recieve the message.
  • lossless: When you send a message, it should be impossible that the message is lost before other channels recieved it
  • low idle workload: During the time when no messages are send, there should be a low processor footprint.

What this is not

  • This is not a polyfill. Do not set this module to window.BroadcastChannel. This implementation behaves similiar to the BroadcastChannel-Standard with these limitations:
    • You can only send data that can be JSON.stringify-ed.
    • While the offical API emits onmessage-events, this module directly emitts the data which was posted
  • This is not a replacement for a message queue. If you use this in NodeJs and want send more than 50 messages per second, you should use proper IPC-Tooling

Browser Support

I have tested this in all browsers that I could find. For ie8 and ie9 you must transpile the code before you can use this. If you want to know if this works with your browser, open the demo page.

Thanks

Thanks to Hemanth.HM for the module name.

Keywords

FAQs

Last updated on 28 Jun 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc