Skip to content

Instantly share code, notes, and snippets.

@PatrickJS
Created June 17, 2014 03:51

Revisions

  1. PatrickJS created this gist Jun 17, 2014.
    25 changes: 25 additions & 0 deletions limit.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,25 @@
    //
    // Listen for messages and process all messages at steady rate limit.
    //
    pubnub.subscribe({
    channel : "hello_world",
    message : limit( function(message) {

    // process your messages at set interval here.

    }, 500 /* milliseconds */ )
    });

    //
    // Rate Limit Function
    //
    function limit( fun, rate ) {
    var queue = [];

    setInterval( function() {
    var msg = queue.shift();
    msg && fun(msg);
    }, rate );

    return function(message) { queue.push(message) };
    }
    30 changes: 30 additions & 0 deletions thrimit.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,30 @@
    //
    // Listen for events and process last message each 500ms.
    //
    pubnub.subscribe({
    channel : "hello_world",
    message : thrimit( function( last_message, all_messages ) {

    // process your last message here each 500ms.

    }, 500 /* milliseconds */ )
    });

    //
    // Throttle + Limit Function
    //
    function thrimit( fun, rate ) {
    var last;
    var queue = [];

    setInterval( function() {
    last !== null && fun( last, queue );
    last = null;
    queue = []
    }, rate );

    return function(message) {
    last = message;
    queue.push(message);
    };
    }
    25 changes: 25 additions & 0 deletions throttle.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,25 @@
    //
    // Listen for events and process last message each 500ms.
    //
    pubnub.subscribe({
    channel : "hello_world",
    message : throttle( function(message) {

    // process your last message here each 500ms.

    }, 500 /* milliseconds */ )
    });

    //
    // Throttle Function
    //
    function throttle( fun, rate ) {
    var last;

    setInterval( function() {
    last !== null && fun(last);
    last = null;
    }, rate );

    return function(message) { last = message };
    }