Dear All,
There is so much to do, specially in terms of documentation, guides and testing. We are actively developing it and Bondy has been in production for 6 months.
Much of the test tooling we use it is outside Bondy, treating it as a black box. We will start investing in unit and regression testing (eunit and common_test in Erlang) and hopefully property-based testing using Quickcheck.
The current version passes all Authobahn.js test but the following:
- testRpcProgress we do not support this feature yet, but coming
- testCBORSerialization the CBOR lib for erlang in not complete and we are not using CBOR at the moment
- testPubsubPrefixSub and testPubsubMultipleMatchingSubs: we have a partial/broken support for prefix and wildcard matching but an implementation of a Radix Trie is almost finished and tested, and should be replacing the existing solution in the coming weeks.
Here are some interesting features in Bondy:
- Distributed router - Bondy is deployed as a cluster where all nodes share all state through gossip replication. It has Active Anti-entropy mechanisms which gets a new node (or node disconnected) in sync with the cluster.
- Distributed RPC & PubSub : because a node has visibility of all Peers connected to the mesh/bus any node can route an INVOCATION or EVENT to a Peer connected to another node
- API Gateway, every node acts as an API gateway which allows to host multiple APIs which are generated using a simple JSON specification (similar to swagger) (a snippet below)
- Partial implementation of OAUTH2 flows
- RBAC subsystem and DB
- BERT and Erlang (external format) serialisation supported (at the moment harcoded to RAW socket slots numbers 4 and 15 respectively)
We will document all of this. There's going to be a video of a presentation I gave yesterday in youtube soon and slides too, so I will include all of that in the repo's REAME.
Looking forward to contributing to WAMP!
Cheers,
Ale
API Spec snippet
"paths" : {
"/add" : {
"is_collection" : false,
"post" : {
"action" : {
"type" : "wamp_call",
"procedure" : "com.example.add2",
"options" : {},
"arguments" : "{{request.body}}"
},
"response" : {
"on_error" : {
"body" : "{{action.error.arguments_kw}}"
},
"on_result" : {
"body" :
"{{action.result.arguments |> head}}"
}
}
},
"options": {
"action": {},
"response": {
"on_error": {"body": ""},
"on_result": {"body": ""}
}
}
}
}