nexus is a WAMP v2 router library, client library, and a router service, that implements most of the features defined in the WAMP-protocol advanced profile. The nexus project is written in Go and designed for highly concurrent asynchronous I/O. The nexus router provides extended functionality. The router and client interoperate with other WAMP implementations.
See the nexus project Wiki for documentation, examples, and operational details.
The Web Application Messaging Protocol (WAMP) is an open standard WebSocket subprotocol that provides two application messaging patterns in one unified protocol: Remote Procedure Calls and Publish & Subscribe. WAMP is also referred to as WAMP-proto it distinguish it from [other uses](https://en.wikipedia.org/wiki/WAMP_(disambiguation) of the acronym.
Using WAMP you can build distributed systems out of application components which are loosely coupled and communicate in (soft) real-time.
Nexus is a software package that provides a WAMP router library, client library, and stand-alone WAMP router service. This nexus package provides a messaging system for building distributed applications and services. Endpoints using websockets, TCP sockets, Unix sockets, and in-process connections may all communicate with each other via pub/sub and routed RPC messaging.
go get -d github.com/gammazero/nexus/nexusd
cd ${GOPATH}/src/github.com/gammazero/nexus/nexusd
make install
Run nexusd -help
to see usage information. Although nexusd
can be run using only command line flags,
a configuration file offers much
more configurability.
cp ${GOPATH}/src/github.com/gammazero/nexus/nexusd/etc/nexus.json ./
vi nexus.json
nexusd -c nexus.json
git clone git@github.com:gammazero/nexus.git
cd nexus/examples
The nexus router library is used to build a WAMP router or embed one in your service. The nexus client library is used to build WAMP clients into you goloang applications. To use either of these libraries, import the v3 version of the appropriate packages. Version v3 is the only currently supported version.
import (
"github.com/gammazero/nexus/v3/client"
"github.com/gammazero/nexus/v3/wamp"
)
Pull the nexusd container image built with the latest code version and run the container:
docker pull ghcr.io/gammazero/nexusd:latest
docker run ghcr.io/gammazero/nexusd:latest
Now it just works. By default, the router accepts connections on port 8080
and allows anonymous communication with
clients using realm1
. You can change the values or get help by passing options to the container process:
docker run ghcr.io/gammazero/nexusd:latest --ws 0.0.0.0:8888 --realm autobahn
docker run ghcr.io/gammazero/nexusd:latest --help
Alternatively, you can mount the nexusd configuration file to the container, and get a more customizable and secure environment. See the nexusd configuration reference for details. Finally, you can also run the container process as an unprivileged user.
Look at the examples to see how to create simple clients and servers. Follow the
README.md in the nexus/examples
directory.
Examples of using advanced profile features are also available in the
wiki documentation.
https://github.com/gammazero/nexus/tree/v3/examples
The examples include interoperability examples to demonstrate nexus working with different WAMP implementations. Each of these has its own README.md that describes how to set up the environment and run the examples.
https://github.com/gammazero/nexus/tree/v3/examples/interop
The nexusd service is also an example stand-alone WAMP router. All the router options are configurable in nexusd
using a configuration file, and one is provided in the nexusd/etc/
directory. This can be used as starting point
to write your own WAMP router service.
https://github.com/gammazero/nexus/tree/v3/nexusd
Please read the Contributing guide if you are interested in becoming a contributor to this project.
Please report any problems, or request changes and new functionality by opening an issue.
The currently maintained version of this module is 3.x. Earlier major versions are no longer supported.
Feature | Supported |
---|---|
progressive_call_results | Yes |
progressive_call_invocations | Yes |
call_timeout | Yes |
call_canceling | Yes |
caller_identification | Yes |
call_trustlevels | No |
registration_meta_events | Yes |
registration_meta_procedures | Yes |
pattern_based_registration | Yes |
shared_registration | Yes |
sharded_registration | No |
registration_revocation | No |
procedure_reflection | No |
payload_passthru_mode | Yes |
Feature | Supported |
---|---|
subscriber_blackwhite_listing | Yes |
publisher_exclusion | Yes |
publisher_identification | Yes |
publication_trustlevels | No |
subscription_meta_events | Yes |
subscription_meta_procedures | Yes |
pattern_based_subscription | Yes |
sharded_subscription | No |
event_history | Yes |
topic_reflection | No |
testament_meta_api | Yes |
payload_passthru_mode | Yes |
Feature | Supported |
---|---|
rawsocket (TCP & Unix) transport | Yes |
session meta events | Yes |
session meta procedures | Yes |
TLS for websockets | Yes |
TLS for rawsockets | Yes |
challenge-response authentication | Yes |
cookie authentication | Yes |
ticket authentication | Yes |
batched WS transport | No |
longpoll transport | No |
websocket compression | Yes |
Nexus provides extended functionality around subscriber black/white listing and in the information available via the session meta API. This enhances the ability of clients to make decisions about message recipients.