How can I push to Faye Server from Rails Controller?

前端 未结 1 1982
忘了有多久
忘了有多久 2020-12-10 09:53

I have this code:

def create
    message = Message.new(text: params[:message][:text], author: params[:message][:author])
    if message.save
      render js         


        
相关标签:
1条回答
  • 2020-12-10 10:26

    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

    0 讨论(0)
提交回复
热议问题