package mangos is an implementation in pure Go of the SP ("Scalable Protocols") protocols.
Clone or download
Latest commit 23b260d Nov 1, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci fixes #319 Update all import paths to reflect nanomsg.org Jun 23, 2018
compat Revert "fixes #323 Discard compat package" Oct 16, 2018
examples Revert "OptionRaw becomes read-only." Oct 16, 2018
macat fixes #319 Update all import paths to reflect nanomsg.org Jun 23, 2018
perf reqrep latency test. Oct 16, 2018
protocol Revert "Introduce different constructors for RAW sockets." Oct 16, 2018
test Revert "OptionRaw becomes read-only." Oct 16, 2018
transport Added OptionKeepAliveTime for the ability to set TCP keep alive time.… ( Oct 2, 2018
.appveyor.yml Redirect appveyor to new location. Jun 23, 2018
.gitignore Add circleci workflow. May 24, 2018
.travis.yml Travis go 1.10 (#313) Apr 11, 2018
AUTHORS fixes #291 Close of inproc does not notify peer Nov 27, 2017
CODE_OF_CONDUCT.md Add CODE_OF_CONDUCT, fix type in CONTRIBUTING. Nov 27, 2017
CONTRIBUTING fixes #319 Update all import paths to reflect nanomsg.org Jun 23, 2018
LICENSE fixes #65 Need a LICENSE file added to repo. Feb 4, 2015
PLANS.md Revert "fixes #323 Discard compat package" Oct 16, 2018
README.md Mangos v2 link updates. Oct 31, 2018
conn.go fixes #2 Add support for Named Pipes on Windows Jun 7, 2018
connipc_posix.go fixes #2 Add support for Named Pipes on Windows Jun 7, 2018
connipc_windows.go fixes #2 Add support for Named Pipes on Windows Jun 7, 2018
core.go Fix regression - pipes map can be nil if socket closed. Oct 3, 2018
device.go Revert "OptionRaw becomes read-only." Oct 16, 2018
dialer.go Dialer doco fix Sep 17, 2018
doc.go fixes #229 gopkg.in import broken. Jun 8, 2018
errors.go Revert "OptionRaw becomes read-only." Oct 16, 2018
listener.go Dialer doco fix Sep 17, 2018
mangos.jpg fixes #121 Add Appveyor status image. Mar 20, 2015
message.go fixes #274 Not working with Message.Header Apr 12, 2017
options.go Revert "OptionRaw becomes read-only." Oct 16, 2018
pipe.go Replace list with a "set" of pipes for the socket. Oct 3, 2018
port.go Update port.go Oct 9, 2018
properties.go fixes #155 Numerous golint issues Nov 9, 2015
protocol.go fixes #257 Channel race in OptionWriteQLen Nov 22, 2016
socket.go fixes #176 Send description confusing Jan 8, 2016
transport.go fixes #222 Add support for wildcard binding Jul 6, 2016
util.go fixes #155 Numerous golint issues Nov 9, 2015
waiter.go fixes #155 Numerous golint issues Nov 9, 2015

README.md

mangos

Linux Status Apache License Gitter GoDoc Go Report Card

Package mangos is an implementation in pure Go of the SP ("Scalability Protocols") messaging system. This makes heavy use of go channels, internally, but it can operate on systems that lack support for cgo.

TIP: This is mangos version 1, but mangos v2 is available. Version 2 has some API breaking changes relative to version 1, but introduces new and useful features, and is recommended for new development.

NOTE: The repository has moved from github.com/go-mangos/mangos. Please import using nanomsg.org/go-mangos. Also, be advised that the master branch of this repository may contain breaking changes. Therefore, consider using a tag, such as v1, to ensure that you have the latest stable version.

The reference implementation of the SP protocols is available as nanomsg™; there is also an effort to implement an improved and more capable version of nanomsg called NNG™.

The design is intended to make it easy to add new transports with almost trivial effort, as well as new topologies ("protocols" in SP terminology.)

At present, all of the Req/Rep, Pub/Sub, Pair, Bus, Push/Pull, and Surveyor/Respondent patterns are supported.

Additionally, there is an experimental new pattern called STAR available. This pattern is like Bus, except that the messages are delivered not just to immediate peers, but to all members of the topology. Developers must be careful not to create cycles in their network when using this pattern, otherwise infinite loops can occur.

Supported transports include TCP, inproc, IPC, WebSocket, WebSocket over TLS and TLS over TCP. Use addresses of the form "tls+tcp://:" to access TLS. Note that ipc:// is not supported on Windows (by either this or the reference implementation.) Forcing the local TCP port in Dial is not supported yet (this is rarely useful).

Basic interoperability with nanomsg and NNG has been verified (you can do so yourself with nanocat and macat) for all protocols and transports that NNG and nanomsg support. Additionally there are a number of projects that use the two products together.

There is a third party experimental QUIC transport available at quic-mangos. (An RFE to make this transport official exists.)

If you find this useful, I would appreciate knowing about it. I can be reached via my email address, garrett -at- damore -dot- org

Installing

Using go get

$ go get -u nanomsg.org/go-mangos

After this command mangos is ready to use. Its source will be in:

$GOPATH/src/pkg/nanomsg.org/go-mangos

You can use go get -u -a to update all installed packages.

Documentation

For docs, see http://godoc.org/nanomsg.org/go-mangos or run:

$ godoc nanomsg.org/go-mangos

Testing

This package supports internal self tests, which can be run in the idiomatic Go way. (Note that most of the tests are in a test subdirectory.)

$ go test nanomsg.org/go-mangos/...

There are also internal benchmarks available:

$ go test -bench=. nanomsg.org/go-mangos/test

Commercial Support

Staysail Systems, Inc. offers commercial support for mangos.

Examples

Some examples are posted in the directories under examples/ in this project.

These examples are rewrites (in Go) of Tim Dysinger's Getting Started with Nanomsg.

godoc in the example directories will yield information about how to run each example program.

Enjoy!

Copyright 2018 The Mangos Authors

mangos™, Nanomsg™ and NNG™ are trademarks of Garrett D'Amore.