package mangos is an implementation in pure Go of the SP ("Scalable Protocols") protocols.
Go Other
Permalink
Failed to load latest commit information.
compat fixes #192 Fail in go 1.6 test Apr 21, 2016
examples fixes #254 Need example for using websockets & demuxing mangos sockets Nov 22, 2016
macat fixes #204 macat: tcp+tls complains about missing TLS configuration May 25, 2016
perf fixes #248 other go report card issues found Oct 28, 2016
protocol fixes #257 Channel race in OptionWriteQLen Nov 22, 2016
test Fix missing defer in the scalability test. Jan 30, 2017
transport fixes #265 Tunable to disable websocket origin check Jan 3, 2017
.appveyor.yml fixes #249 AppVeyor.yml file needed Oct 28, 2016
.gitignore Added AUTHORS (identifying "The Mangos Authors", and changed copyrigh… Aug 12, 2014
.travis.yml Remove master branch for git -- its broken on Travis. Oct 28, 2016
AUTHORS fixes #265 Tunable to disable websocket origin check Jan 3, 2017
CONTRIBUTING fixes #203 Add CONTRIBUTING file May 20, 2016
LICENSE fixes #65 Need a LICENSE file added to repo. Feb 4, 2015
README.md Fix goreport badge Jul 5, 2016
conn.go fixes #255 Make TLS ConnectionState available at RecvMsg (update copy… Nov 18, 2016
core.go fixes #270 race reading sock.wdeadline Jan 30, 2017
device.go fixes #245 Spelling errors in comments Oct 28, 2016
dialer.go fixes #66 Desire more fine grained access to Dialer and Listener Feb 6, 2015
doc.go fixes #188 use vanity import path Apr 21, 2016
errors.go fixes #155 Numerous golint issues Nov 9, 2015
listener.go fixes #66 Desire more fine grained access to Dialer and Listener Feb 6, 2015
mangos.jpg fixes #121 Add Appveyor status image. Mar 20, 2015
message.go fixes #213 regression in large message handling Jun 12, 2016
options.go fixes #232 Best Effort send option Oct 18, 2016
pipe.go fixes #199 Fix {Local,Remote}Protocol() - calls itself May 20, 2016
port.go fixes #155 Numerous golint issues Nov 9, 2015
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 Windows Status Apache License Gitter GoDoc Go Report Card

package mangos is an implementation in pure Go of the SP ("Scalable Protocols") protocols. This makes heavy use of go channels, internally, but it can operate on systems that lack support for cgo. It has no external dependencies.

The reference implementation of the SP protocols is available as nanomsg

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/TLS and TLS. 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 has been verified (you can do so yourself with nanocat and macat) for all protocols nanomsg supports. Additionally there are a number of projects that use the two products together.

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 github.com/go-mangos/mangos

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

$GOPATH/src/pkg/github.com/go-mangos/mangos

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

Documentation

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

$ godoc github.com/go-mangos/mangos

Testing

This package supports internal self tests, which can be run in the idiomatic Go way, although it uses a separate test sub-package:

$ go test github.com/go-mangos/mangos/test

There are also internal benchmarks available:

$ go test -bench=. github.com/go-mangos/mangos/test

Examples

Some examples are posted in the directories under examples/ The examples are rewrites (in Go) of Tim Dysinger's libnanomsg examples, which are located at

http://tim.dysinger.net/posts/2013-09-16-getting-started-with-nanomsg.html

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

Enjoy!

Copyright 2015 The Mangos Authors