Skip to content
This repository was archived by the owner on Nov 22, 2024. It is now read-only.
/ mruby-zyre Public archive

Zyre - an open-source framework for proximity-based peer-to-peer applications

License

Notifications You must be signed in to change notification settings

Asmod4n/mruby-zyre

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mruby-zyre

This is a naive wrapper around https://github.com/zeromq/zyre. Most methods found at https://github.com/zeromq/zyre#api-summary are mapped 1:1 to ruby.

Prerequirements

You need to have https://github.com/zeromq/libzmq, https://github.com/zeromq/czmq and https://github.com/zeromq/zyre installed in a path mruby can find it. zyre isn't yet in most package managers, the maintainers recommend it to install the latest git master.

Examples

Simple local subnet discovery via UDP

zyre1 = Zyre.new#(name = nil)
zyre1["MyHeader"] = "MyValue"
zyre1.join("channel")

zyre2 = Zyre.new
zyre2.join("channel")

zyre1.start
zyre2.start

zyre2.recv
peer = zyre2.peers.first
puts zyre2.peer_header_value(peer, "MyHeader")
zyre2.shout("channel", "hallo")
zyre2.whisper(peer, "hello")
puts zyre1.recv
puts zyre1.recv
puts zyre1.recv
puts zyre1.recv
puts zyre1.peers_by_group("channel")

Discovery via TCP

zyre1 = Zyre.new "node1"
zyre1.endpoint = "tcp://127.0.0.1:5671" # this enables gossip discovery via tcp instead of udp broadcasts in the local subnet
zyre1.gossip_bind "tcp://127.0.0.1:5670" # at least one node must bind to a endpoint which other nodes can connect to
zyre1.join "channel"

zyre2 = Zyre.new "node2"
zyre2.endpoint = "tcp://127.0.0.1:5672" # wildcards are sadly not supported, even though libzmq supports them
zyre2.gossip_connect "tcp://127.0.0.1:5670"
zyre2.join "channel"

zyre1.start
zyre2.start

zyre2.recv

You can let several nodes bind to a gossip endpoint and connect them together

zyre1 = Zyre.new "node1"
zyre1.endpoint = "tcp://127.0.0.1:5671"
zyre1.gossip_bind "tcp://127.0.0.1:5670"
zyre2.gossip_connect "tcp://127.0.0.1:5673"
zyre1.join "channel"

zyre2 = Zyre.new "node2"
zyre2.endpoint = "tcp://127.0.0.1:5672"
zyre2.gossip_bind "tcp://127.0.0.1:5673"
zyre2.gossip_connect "tcp://127.0.0.1:5670"
zyre2.join "channel"

zyre3 = Zyre.new
zyre3.endpoint = "tcp://127.0.0.1:5674"
zyre3.gossip_connect "tcp://127.0.0.1:5670"
zyre3.gossip_connect "tcp://127.0.0.1:5673"
zyre3.join "channel"

zyre1.start
zyre2.start
zyre3.start

zyre3.recv
puts zyre3.peers

It should also be possible to bind to several gossip endpoints

Encryption/Authentication

None as of this writing. Feel free to fix that upstream. zeromq has built in support for strong encryption and authentication, but so far no czmq based services offer it.

About

Zyre - an open-source framework for proximity-based peer-to-peer applications

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published