WAMP

WAMP (Web Application Messaging Protocol) is an open WebSocket subprotocol that provides two application messaging patterns in one unified protocol: Remote Procedure Calls + Publish-Subscribe


 * http://wamp.ws/spec/
 * https://github.com/tavendo/WAMP/blob/master/spec/basic.md
 * https://github.com/tavendo/WAMP/blob/master/spec/advanced.md

Extra

 * WAMP with Arduino Yun http://tavendo.com/blog/post/arduino-yun-with-autobahn/

Install Crossbar (the Router)

 * http://crossbar.io/

pip install crossbar[tls,msgpack,manhole,system] crossbar version crossbar init --template hello:nodejs --appdir hello cd hello crossbar start

Open http://localhost:8080/

Install Autobahn (The Node.js client)

 * http://crossbar.io/docs/Getting-started-with-NodeJS/
 * http://autobahn.ws/js/gettingstarted.html
 * http://autobahn.ws/js/programming.html

npm install -g autobahn export NODE_PATH=/usr/local/lib/node_modules

var autobahn = require('autobahn');

var connection = new autobahn.Connection({  url: 'ws://127.0.0.1:8080/ws',   realm: 'realm1'} );

connection.onopen = function (session) {

// SUBSCRIBE to a topic and receive events //  function onhello (args) { var msg = args[0]; console.log("event for 'onhello' received: " + msg); }  session.subscribe('com.example.onhello', onhello).then(      function (sub) {         console.log("subscribed to topic 'onhello'");      },      function (err) {         console.log("failed to subscribed: " + err);      }   );

// REGISTER a procedure for remote calling //  function add2 (args) { var x = args[0]; var y = args[1]; console.log("add2 called with " + x + " and " + y); return x + y;  } session.register('com.example.add2', add2).then(     function (reg) {         console.log("procedure add2 registered");      },      function (err) {         console.log("failed to register procedure: " + err);      }   );

// PUBLISH and CALL every second .. forever //  var counter = 0; setInterval(function {

// PUBLISH an event //     session.publish('com.example.oncounter', [counter]); console.log("published to 'oncounter' with counter " + counter);

// CALL a remote procedure //     session.call('com.example.mul2', [counter, 3]).then(         function (res) {            console.log("mul2 called with result: " + res);         },         function (err) {            if (err.error !== 'wamp.error.no_such_procedure') {               console.log('call of mul2 failed: ' + err);            }         }      );

counter += 1; }, 1000); };

connection.open;

Node-RED
TODO