nexus

module
v3.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 31, 2020 License: MIT

README

WAMP v2 router library, client library and router service

Build Status License

nexus is a WAMP v2 router library, client library, and a router service, that implements most of the features defined in the 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.

Full Documentation

See the nexus project Wiki for full documentation, examples, and operational details.

For the API: GoDoc

What is WAMP and nexus

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

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 eachother via pub/sub and routed RPC messaging.

  • The router library can be used to build custom WAMP routers or to embed a WAMP router in an application.
  • The client library can be used to build clients that connect to any WAMP server, or to communicate in-process with a WAMP router embedded in the same application.
  • The router service can be run as-is to provide WAMP routing.
Nexus Features
  • Concurrent Asynchronous I/O Nexus supports large numbers of clients concurrently sending and receiving messages, and never blocks on I/O, even if a client becomes unresponsive. See Router Concurrency for details.
  • WAMP Advanced Profile Features This project implements most of the advanced profile features in WAMP v2. See current feature support provided by nexus. Nexus also offers extended functionality for retrieving session information and for message filtering, giving clients more ability to decide where to send messages.
  • Flexibility Multiple transports and serialization options are supported, and more are being developed to maximize interoperability. Currently nexus provides websocket, rawsocket (tcp and unix), and local (in-process) transports. JSON, MessagePack, and CBOR serialization is available over websockets and rawsockets.
  • Security TLS is available over websockets and rawsockets with client and server APIs that allow configuration of TLS. The nexus router library also provides interfaces for integration of client authentication and authorization logic.

Quick Start

Installation

If using modules and importing a package, no installation is needed, but use v3 as that is the first version that is compatible with modules:

import (
	"github.com/gammazero/nexus/v3/client"
	"github.com/gammazero/nexus/v3/wamp"
)

If not using modules:

go get github.com/gammazero/nexus/...

If you run into errors, and have previously used the Gorilla websocket package on another project, run the following command to update Gorilla, and try the above command again:

go get -u github.com/gorilla/websocket
Build, Configure, and Run Router Service

The nexus router library is generally used to build a WAMP router or embed one in your server. A very basic stand-alone router, nexusd, is provided and can be built and run as follows:

cd nexus/nexusd/
go build
vi etc/nexus.json
./nexusd
Examples

Look at the examples to see how to create simple clients and servers. Examples of using advanced profile features are available in the full documentation.

https://github.com/gammazero/nexus/tree/v3/examples

Contributing

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.

Status

The currently maintained version of this module is 3.x. Earlier major versions are no longer supported.

Advanced Profile Feature Support

RPC Features
Feature Supported
progressive_call_results Yes
progressive_calls No
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
PubSub Features
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 No
topic_reflection No
testament_meta_api Yes
Other Advanced Features
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

Extended Functionality

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 desisions about message recipients.

Directories

Path Synopsis
Package AAT is a collection of Automated Acceptance Tests.
Package AAT is a collection of Automated Acceptance Tests.
Package client provides a WAMP client implementation that is interoperable with any standard WAMP router and is capable of using all of the advanced profile features supported by the nexus WAMP router.
Package client provides a WAMP client implementation that is interoperable with any standard WAMP router and is capable of using all of the advanced profile features supported by the nexus WAMP router.
examples
newclient
Package newclient provides a function to create a new client with the socket type and serialization specified by command like arguments.
Package newclient provides a function to create a new client with the socket type and serialization specified by command like arguments.
rpc_progressive_results/caller
Progressive Call Results Example Caller This example demonstrates a caller client that receives data in chunks, as separate progressive call results.
Progressive Call Results Example Caller This example demonstrates a caller client that receives data in chunks, as separate progressive call results.
server
Example nexus WAMP router that handles websockets (with/out TLS), TCP rawsockets (with/out TLS), and unix rawsockets.
Example nexus WAMP router that handles websockets (with/out TLS), TCP rawsockets (with/out TLS), and unix rawsockets.
simple
Simple example nexus WAMP router that handles websockets.
Simple example nexus WAMP router that handles websockets.
Stand-alone nexus router service.
Stand-alone nexus router service.
Package router provides a WAMP router implementation that supports most of the WAMP advanced profile, offers multiple transports and TLS, and extends publication filtering functionality.
Package router provides a WAMP router implementation that supports most of the WAMP advanced profile, offers multiple transports and TLS, and extends publication filtering functionality.
auth
Package auth provides interfaces for implementing authentication logic that the WAMP router can use.
Package auth provides interfaces for implementing authentication logic that the WAMP router can use.
Package stdlog provides a minimal logging interface to allow nexus to use nearly any logging implementation.
Package stdlog provides a minimal logging interface to allow nexus to use nearly any logging implementation.
Package transport provides a websocket, rawsocket, and local transport implementation.
Package transport provides a websocket, rawsocket, and local transport implementation.
serialize
Package serialize provides a Serializer interface with implementations that encode and decode message data in various ways.
Package serialize provides a Serializer interface with implementations that encode and decode message data in various ways.
Package wamp defines all message types, data types, and reserved URI values defined by the WAMP specification.
Package wamp defines all message types, data types, and reserved URI values defined by the WAMP specification.
crsign
Package crsign provides functionality for signing challenge data in challenge-response authentication.
Package crsign provides functionality for signing challenge data in challenge-response authentication.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL