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:
- one process controller
- multiple workers
Workers:
- Native Workers
- Routers: WAMP routing services between WAMP clients
- Containers: application components written in Python
- Guest Workers: arbitrary programs spawned
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]