# Hara [![Gem Version](https://badge.fury.io/rb/hara.png)](http://badge.fury.io/rb/hara) [![Build Status](https://travis-ci.org/jjyr/hara.png?branch=master)](https://travis-ci.org/jjyr/hara) Hara is a simple framework, help you build async & concurrent websocket server. Hara's async ability from [em-websocket](https://github.com/igrigorik/em-websocket), Hara's concurrent ability from [celluloid](https://github.com/celluloid/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* ```ruby #test.rb require 'hara' class Echo include Hara::App define_action :echo do |str| socket.send str end end ``` *client* ```javascript 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 ```ruby 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