Just a second...

JavaScript

The JavaScript® API is provided in the file diffusion.js and can be accessed through the web or through NPM.

Include JavaScript in a web page:

<script src="http://download.pushtechnology.com/clients/6.4.4/js/diffusion.js"/>

This hosted version of the Diffusion™ JavaScript library is served with GZIP compression enabled. GZIP compression reduces the library to 20% of its uncompressed size and ensuring fast page loads.

Use with Node.js:

Install with npm:

npm install diffusion

Include in your Node.js application:

var diffusion = require('diffusion');
You can also download the JavaScript file as a tarball package that can be installed locally by using NPM:
http://download.pushtechnology.com/clients/6.4.4/js/diffusion-js-6.4.4.tgz

Get the minified JavaScript:

Download the latest JavaScript file from the following URL:
http://download.pushtechnology.com/clients/6.4.4/js/diffusion.js

The Diffusion JavaScript client library is a full featured library and as such is provided as a large download file. However, when served with GZIP compression, the size of the served file is significantly smaller than the size of the downloaded file. Ensure that you enable GZIP compression on the web server that hosts the JavaScript client library.

The minified version of the JavaScript client library is approximately 70% of the size of the unminified version.

Get the unminified JavaScript:

Download the latest unminified JavaScript client library from the following URL:
http://download.pushtechnology.com/clients/6.4.4/js/diffusion-unminified.js

The minified version of the Diffusion JavaScript client library is created with Browserify. The minified version might not be compatible with certain JavaScript frameworks. This unminified version is provided to enable you to include Diffusion in projects using any framework.

The unminified form of JavaScript client library also gives you the option to perform minification of your whole client application and make further size savings.

Enable zlib compression

Diffusion Cloud clients use zlib to support message compression. Since Diffusion 6.1, zlib code for message decompression has been removed from the main JavaScript client library to reduce its size and separated out into browserify-zlib-0.2.0.js.

browserify-zlib-0.2.0.js is included in the clients/js directory of a Diffusion Cloud installation, or can be downloaded from JavaScript SDK downloads.

Include browserify-zlib-0.2.0.js for clients that want to make use of the client compression capability. This can be achieved at build time by using browserify to package the browserify-zlib npm module into the application library.

Clients will log out a warning at startup if browserify-zlib-0.2.0.js is not included. The client's initial connection request will set the per-message compression capability depending on whether it is included or not. This will indicate to the server whether messages should be compressed before they are sent to the client.

Use TypeScript definitions with the JavaScript client library:

If you got the JavaScript client library using NPM, the TypeScript definitions are included.

You can also download a TypeScript definition file from the following URL:
http://download.pushtechnology.com/clients/6.4.4/js/diffusion-6.4.4.d.ts

Include the TypeScript definition file in your IDE project to use the TypeScript definitions when developing a JavaScript client for Diffusion Cloud.

Use with webpack

The JavaScript npm client supports the use of webpack and has been tested with webpack 4.16.2.

Targeting Node.js with webpack

When targeting Node.js with webpack, to avoid a dependency issue, add this line to webpack.config.js:
plugins: [ new webpack.IgnorePlugin(/vertx/) ]
Ensure that at the top of webpack.config.js you have:
const webpack = require('webpack');

Capabilities

To see the full list of capabilities supported by the JavaScript API, see Feature support in the Diffusion API.

Support

For information about the browsers supported by the Diffusion JavaScript client, see Browser support.

Table 1. Supported platforms and transport protocols for the client libraries
Platform Minimum supported versions Supported transport protocols
JavaScript

es6

(TypeScript 1.8)

WebSocket

HTTP (Polling XHR)

Resources

Using

Promises
The Diffusion Cloud JavaScript API uses the Promises/A+ specification.
Views

The JavaScript API provides a view capability.

Use views to subscribe to multiple topics by using a topic selector and receive all the data from all topics in the selector set as a single structure when any of the topics are updated. If the topic selector matches a topic which is subsequently added or removed, the view is updated.

The following example shows views being used to present data from multiple topics as a single structure:
diffusion.connect({
    host        : 'localhost',
    port        : 8080,
    secure      : false,
    principal   : 'control',
    credentials : 'password'
}).then(function(session) {

    // Assuming a topic tree:
    //
    // scores
    //   |-- football
    //   |     |-- semi1
    //   |     |-- semi2
    //   |     |-- final
    //   |
    //   |-- tennis
    //         |-- semi1
    //         |-- semi2
    //         |-- final

    // Use a regular expression to create a view of the topics tracking the
    // scores during the finals for each sport.
    var view = session.view('?scores/.*/final');

    // Alternatively, we can use a topic set. Note that the topics do not need
    // to be under a common root, they may be anywhere within the topic tree.
    var view2 = session.view('#>scores/football/final////>scores/tennis/final');

    // If any of the topics in the view change, display which topic changed
    // and its new value.
    view.on({
        update : function(value) {
            // Get and print the entire view structure.
            console.log('Update: ', JSON.stringify(value, undefined, 4));

            // Get individual topics. Returns a Buffer, which is automatically
            // converted to a String during concatenation, below.
            //
            // Note that the structure may not exist if the value has not been
            // updated.
            console.log('Football score: ' + value.scores.football.final);
            console.log('Tennis score  : ' + value.scores.tennis.final);

            // or ...
            // console.log('Football score: ' + value['scores']['football']['final']);
        }
    });

    // The structure can also be accessed outside the update event.
    console.log('Football score: ' + view.get().scores.football.final);
});
Regular expressions

The JavaScript client uses a different regular expression engine to Diffusion Cloud. Some regular expressions in topic selectors are evaluated on the client and others on Diffusion Cloud. It is possible that topic selectors that include complex or advanced regular expressions can behave differently on the client and on Diffusion Cloud.

For more information, see Regular expressions.