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