I did't use Event Machine but I use Fay-web Socket in rails , I am using thin web-server for my application to show notification.
First you add this line into you Gemfile
gem 'faye'
gem 'thin'
Now ! run bundle install command for install gem and it's
dependency.
Create a faye.ru file and add given line (a rackup file for run
Faye server ).
require 'rubygems'
require 'thin'
require 'faye'
faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 45)
run faye_server
Now add line to your application.erb file
<%= javascript_include_tag 'application', "http://localhost:9292/faye.js", 'data-turbolinks-track' => true %>
Create a method with name broadcast or any name which is
suitable for you in websoket.rb
(first create websoket.rb file
inside config/initializers
) .
module Websocket
def broadcast(channel, msg)
message = {:channel => channel, :data => msg}
uri = URI.parse("http://localhost:9292/faye")
Net::HTTP.post_form(uri, :message => message.to_json)
end
end
Now use this method inside your model or controller where you want.
In my case I am using this inside the **Notification.rb to sending notification.**
Example
after_create :send_notificaton
def send_notification
broadcast("/users/#{user.id}", {username: "#{user.full_name }", msg: "Hello you are invited for project--| #{project.name} | please check your mail"})
end
For subscriber
<div id="websocket" style="background-color: #999999;">
</div>
<script>
$(function () {
var faye = new Faye.Client('http://localhost:9292/faye');
faye.subscribe('/users/<%= current_user.id %>', function (data) {
$('#websocket').text(data.username + ": " + data.msg);
});
});
</script>
Now ! Run your faye.ru file using terminal
rackup faye.ru -s thin -E prodcution
For details
Faye websocket