Difference between revisions of "WAMP"

From air
Jump to navigation Jump to search
(Created page with "WAMP (Web Application Messaging Protocol) is an open WebSocket subprotocol that provides two application messaging patterns in one unified protocol: [[Remote Procedure Cal...")
 
 
(7 intermediate revisions by the same user not shown)
Line 7: Line 7:
 
==Extra==
 
==Extra==
 
* WAMP with Arduino Yun http://tavendo.com/blog/post/arduino-yun-with-autobahn/
 
* WAMP with Arduino Yun http://tavendo.com/blog/post/arduino-yun-with-autobahn/
  +
  +
==[[Node.js]]==
  +
===Install Crossbar (the Router)===
  +
* http://crossbar.io/
  +
  +
<pre>
  +
pip install crossbar[tls,msgpack,manhole,system]
  +
crossbar version
  +
crossbar init --template hello:nodejs --appdir hello
  +
cd hello
  +
crossbar start
  +
</pre>
  +
  +
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
  +
  +
<pre>
  +
npm install -g autobahn
  +
export NODE_PATH=/usr/local/lib/node_modules
  +
</pre>
  +
  +
  +
<pre>
  +
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();
  +
  +
</pre>
  +
  +
==[[Node-RED]]==
  +
TODO

Latest revision as of 23:20, 16 November 2014

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

Extra

Node.js

Install Crossbar (the Router)

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)

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