Поиск…


замечания

ActionCable был доступен для Rails 4.x и был включен в Rails 5. Он позволяет легко использовать websockets для обмена в реальном времени между сервером и клиентом.

[Основная] сторона сервера

# app/channels/appearance_channel.rb
class NotificationsChannel < ApplicationCable::Channel
  def subscribed
    stream_from "notifications"
  end

  def unsubscribed
  end

  def notify(data)
    ActionCable.server.broadcast "notifications", { title: 'New things!', body: data }
  end
end

[Основная] Сторона клиента (Coffeescript)

Приложение / активы / JavaScripts / каналы / notifications.coffee

App.notifications = App.cable.subscriptions.create "NotificationsChannel",
  connected: -> 
    # Called when the subscription is ready for use on the server
    $(document).on "change", "input", (e)=>
      @notify(e.target.value)

  disconnected: ->
    # Called when the subscription has been terminated by the server
     $(document).off "change", "input"

  received: (data) ->
    # Called when there's incoming data on the websocket for this channel
    $('body').append(data)

  notify: (data)->
    @perform('notify', data: data)

app / assets / javascripts / application.js # обычно генерируется как это

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .

app / assets / javascripts / cable.js # обычно генерируется как это

//= require action_cable
//= require_self
//= require_tree ./channels

(function() {
  this.App || (this.App = {});

  App.cable = ActionCable.createConsumer();

}).call(this);

Аутентификация пользователя

# app/channels/application_cable/connection.rb
module ApplicationCable
  class Connection < ActionCable::Connection::Base
    identified_by :current_user

    def connect
      self.current_user = find_verified_user
      logger.add_tags 'ActionCable', current_user.id 
      # Can replace current_user.id with usernames, ids, emails etc.
    end

    protected

    def find_verified_user
      if verified_user = env['warden'].user
        verified_user
      else
        reject_unauthorized_connection
      end
    end
  end
end


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow