All Projects → gammazero → Nexus

gammazero / Nexus

Licence: mit
Full-feature WAMP v2 router and client written in Go

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Nexus

Django instagram
Photo sharing social media site built with Python/Django. Based on Instagram's design.
Stars: ✭ 165 (-11.29%)
Mutual labels:  messaging, websockets
Bigq
Messaging platform in C# for TCP and Websockets, with or without SSL
Stars: ✭ 18 (-90.32%)
Mutual labels:  messaging, websockets
Webwire Go
A transport independent asynchronous duplex messaging library for Go
Stars: ✭ 216 (+16.13%)
Mutual labels:  messaging, websockets
Crossbar
Crossbar.io - WAMP application router
Stars: ✭ 1,957 (+952.15%)
Mutual labels:  wamp, messaging
Spring Streaming
SPA on Spring Boot 1.x, WebSockets and React, gradle, nodejs, spring-boot, gradle multi project, spring-mvc, spring-data, gradle dependency update plugin, react-router
Stars: ✭ 6 (-96.77%)
Mutual labels:  messaging, websockets
Emberclear
Encrypted Chat. No History. No Logs.
Stars: ✭ 157 (-15.59%)
Mutual labels:  messaging, websockets
Acli
Action Cable command-line client
Stars: ✭ 169 (-9.14%)
Mutual labels:  websockets
Kemalyst
A rails like framework based on kemal
Stars: ✭ 176 (-5.38%)
Mutual labels:  websockets
React Messenger
Chat UX components built with React, inspired by Facebook Messenger
Stars: ✭ 167 (-10.22%)
Mutual labels:  messaging
Mnm
The legitimate email replacement — n-identity, decentralized, store-and-forward, open protocol, open source. (Server)
Stars: ✭ 162 (-12.9%)
Mutual labels:  messaging
Enmasse
EnMasse - Self-service messaging on Kubernetes and OpenShift
Stars: ✭ 185 (-0.54%)
Mutual labels:  messaging
Scaproust
Implementation of the nanomsg "Scalability Protocols" in rust.
Stars: ✭ 183 (-1.61%)
Mutual labels:  messaging
Liftbridge
Lightweight, fault-tolerant message streams.
Stars: ✭ 2,175 (+1069.35%)
Mutual labels:  messaging
Rabbitmq Mqtt
RabbitMQ MQTT plugin
Stars: ✭ 169 (-9.14%)
Mutual labels:  messaging
Shoutrrr
Notification library for gophers and their furry friends.
Stars: ✭ 177 (-4.84%)
Mutual labels:  messaging
Kubernetes Nats Cluster
NATS cluster on top of Kubernetes made easy.
Stars: ✭ 168 (-9.68%)
Mutual labels:  messaging
Chatlayout
ChatLayout is an alternative solution to MessageKit. It uses custom UICollectionViewLayout to provide you full control over the presentation as well as all the tools available in UICollectionView. It supports dynamic cells and supplementary view sizes.
Stars: ✭ 184 (-1.08%)
Mutual labels:  messaging
Tigase Server
Highly optimized, extremely modular and very flexible XMPP/Jabber server
Stars: ✭ 170 (-8.6%)
Mutual labels:  messaging
Kombu
Kombu is a messaging library for Python.
Stars: ✭ 2,263 (+1116.67%)
Mutual labels:  messaging
Uwebsockets
Simple, secure & standards compliant web server for the most demanding of applications
Stars: ✭ 13,412 (+7110.75%)
Mutual labels:  websockets

WAMP v2 router library, client library and router service

Build Status License GoDoc

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.

Documentation

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

GoDoc for API documentation.

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. 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.

  • 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.

Installation

Install nexusd router service from source

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.

Create configuration file and run nexusd service

cp ${GOPATH}/src/github.com/gammazero/nexus/nexusd/etc/nexus.json ./
vi nexus.json
nexusd -c nexus.json

Install examples to run and test with

git clone [email protected]:gammazero/nexus.git
cd nexus/examples

Building routers and clients with nexus

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"
)

Examples

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 of 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

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.

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 and Client 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.

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].