Hara

Gem Version Build Status

Hara is a simple framework, help you build async & concurrent websocket server.

Hara's async ability from em-websocket,

Hara's concurrent ability from celluloid.

Yes, hara is a combination of them, eventmachine and celluloid work well together :)

Installation

Add this line to your application's Gemfile:

gem 'hara'

And then execute:

$ bundle

Or install it yourself as:

$ gem install hara

BasicUsage

server

#test.rb
require 'hara'

class Echo 
  include Hara::App

  define_action :echo do |str|
    socket.send str
  end
end

client

var msg = JSON.stringify({action: 'echo',args:['hello world']})
var ws = new WebSocket('ws://localhost:3210')
ws.onmessage = function(msg){alert(msg.data)}

//after a while
ws.send(msg)
//hello world

start server ruby test.rb

ruby test.rb -h to view options

Other Usages & How it work

require 'hara/base'

class Echo 
  #include Hara::App, make you Echo class become Celluloid::Actor and per actor handle a socket
  include Hara::App

  #Hara::App provide some callbacks

  def after_connect
    puts 'first called'
    p headers
  end

  def before_action action, *args
    puts 'called when action comming'
  end

  define_action :echo do |str|
    puts "#{client_ip} #{client_port}"
    socket.send str
  end

  def after_action action, *args
    puts 'called when action complete'
  end
end

#if you require 'hara/base' you need start server you self, like below
Hara::Server.start 'localhost', '3000'

RoadMap

js client is processing

Contributing

  1. Fork it
  2. Feel free to send pull requests