0.01
No commit activity in last 3 years
No release in over 3 years
Websocket client for Grenache
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 3.3
~> 1.7
 Project Readme

grenache-ruby-ws

Grenache is a micro-framework for connecting microservices. Its simple and optimized for performance.

Internally, Grenache uses Distributed Hash Tables (DHT, known from Bittorrent) for Peer to Peer connections. You can find more details how Grenche internally works at the Main Project Homepage

  • Setup
  • Examples
  • API

Setup

Install

gem install grenache-ruby-ws

Other Requirements

Install Grenache Grape: https://github.com/bitfinexcom/grenache-grape:

npm i -g grenache-grape
// Start 2 Grapes
grape --dp 20001 --aph 30001 --bn '127.0.0.1:20002'
grape --dp 20002 --aph 40001 --bn '127.0.0.1:20001'

Examples

RPC Server / Client

This RPC Server example announces a service called rpc_test on the overlay network. When a request from a client is received, it replies with world. It receives the payload hello from the client.

The client sends hello and receives world from the server.

Internally the DHT is asked for the IP of the server and then the request is done as Peer-to-Peer request via websockets.

Grape:

grape --dp 20001 --aph 30001 --bn '127.0.0.1:20002'
grape --dp 20002 --aph 40001 --bn '127.0.0.1:20001'

Server:

require "grenache-ruby-ws"

EM.run do
  Signal.trap("INT")  { EventMachine.stop }
  Signal.trap("TERM") { EventMachine.stop }

  c = Grenache::Ws.new(grape_address: "http://127.0.0.1:40001/")
  port = 5001

  c.listen("test_service", port) do |req|
    error = nil
    [error,"hello #{req.payload}"]
  end
end

Client:

require "grenache-ruby-ws"

c = Grenache::Ws.new(grape_address: "http://127.0.0.1:40001/")

EM.run do
  10.times do |n|
    c.request("test_service","world #{n}") do |err, msg|
      if err
        puts "error: #{err}"
      else
        puts "response: #{msg}"
      end
    end
  end
end

Code Server Code Client

API

Class: Grenache::Ws

Grenache::Ws.new(options)

  • options
    • :grape_address <String>

    • :timeout <Number>

    • :auto_announce_interval <Number>

    • :auto_announce <Boolean>

    • :service_timeout <Number>

    • :service_host <String>

client.request(name, payload, options)

  • name <String> Name of the service to address
  • payload Payload to send
  • options
    • :timeout Timeout for the request

Sends a single request to a RPC server/worker. Example.

client.listen(key, port, options)

  • name <String> Name of the service to announce
  • port <Number> Port to listen
  • options

Sets up a worker which connects to the DHT. Listens on the given port.

Example.