====== 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]