Table of Contents

WAMP

Concepts

A Crossbar.io node is a single instance of the Crossbar.io software running in a specific node directory

There are two types of processes running within a Crossbar.io node:

Workers:

WAMP router

Use python only 2.x

prereq

apt-get install python-virtualenv python-dev libffi-dev \
 libssl-dev libxml2-dev libxslt1-dev libyaml-dev 
pip install crossbar[tls,msgpack,manhole,system]
pip install setproctitle

ATTENZIONE con la versione 0.11.1, commentare la riga 232 di lib/lib/python2.7/site-packages/crossbar/controller/process.py

#ep['meta'] = e(None)

Create new router node

cd /path/
crossbar init --template default

.crossbar/config.json

{
    "controller": {
    },
    "workers": [
    {
        "type": "router",
        "options": {
            "pythonpath": [".."]
        },
        "manhole": {
            "endpoint": {
                "type": "tcp",
                "port": 6022
            },
            "users": [
            {
                "user": "scipio",
                "password": "z"
            }
            ]
        },
        "realms": [
        {
            "name": "realm1",
            "roles": [
            {
                "name": "anonymous",
                "permissions": [
                {
                    "uri": "*",
                    "publish": true,
                    "subscribe": true,
                    "call": true,
                    "register": true
                }
                ]
            }
            ]
        }
        ],
            "transports": [
            {
                "type": "web",
                "endpoint": {
                    "type": "tcp",
                    "port": 8080
                },
                "paths": {
                    "ws": {
                        "type": "websocket",
                        "debug": false
                    }
                }
            }
        ]
    }
    ]
}

Start node

crossbar start

supervisor config

[program:wamp]
command=/opt/wamp/lib/bin/crossbar start --cbdir /opt/wamp/.crossbar
user=wamp
autostart=true

http bridge publisher and caller

An http POST request can emit WAMP event, or we can call an RPC via http POST.

"transports": [
    {
       "type": "web",
       "endpoint": {
          "type": "tcp",
          "port": 8080
       },
       "paths": {
          ...
          "push": {
             "type": "publisher",
             "realm": "realm1",
             "role": "anonymous"
          },
          "call": {
             "type": "caller",
             "realm": "realm1",
             "role": "anonymous"
          }

       }
    }
]

example of event publish

import requests
requests.post("http://router_ip/push",
                  json={
                      'topic': 'great_topic'
                      'args': [some, params, to, pass, along, if, you, need, to]
                  })

example of event post with curl

curl --connect-timeout 3 \
     -H "Content-Type: application/json" \
     -d '{"topic": "vr.ztl.passaggi", "kwargs": {"uids":[1,2,3]}}' \
     http://localhost:8081/push

example of RPC call with curl

curl --connect-timeout 3 \
     -H "Content-Type: application/json" \
     -d '{"procedure": "vr.ztl.permessi.get", "args": ["EC316MP"]}' \
     http://127.0.0.1:8081/call

WSGI app (pyramid)

Create wsgi.py in same folder as setup.py

ini_path = '../development.ini'

from pyramid.paster import get_app, setup_logging
setup_logging(ini_path)
application = get_app(ini_path, 'main')

Add to “paths”

                    "/": {
                        "type": "wsgi",
                        "module": "wsgi",
                        "object": "application"
                    },

WAMP node

Use python 3.x

pip install autobahn[asyncio,twisted]