Ruby on Rails
ActionCable
Ricerca…
Osservazioni
ActionCable era disponibile per Rails 4.x, ed era in bundle in Rails 5. Permette un facile utilizzo dei websocket per la comunicazione in tempo reale tra server e client.
[Base] Lato server
# 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
[Base] Lato client (Coffeescript)
app / beni / javascript / canali / 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 # di solito generato in questo modo
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
app / assets / javascripts / cable.js # di solito generato in questo modo
//= require action_cable
//= require_self
//= require_tree ./channels
(function() {
this.App || (this.App = {});
App.cable = ActionCable.createConsumer();
}).call(this);
Autenticazione utente
# 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow