gem 'actioncable', github: 'rails/actioncable' gem 'puma'
resources :messages, only: [:index, :create] resources :sessions, only: [:new, :create]
# app/controllers/sessions_controller.rb class SessionsController < ApplicationController def create cookies.signed[:username] = params[:session][:username] redirect_to messages_path end end
= form_for :session, url: sessions_path do |f| p = f.label :username, ' ' p = f.text_field :username p = f.submit ''
# app/controllers/messages_controller.rb class MessagesController < ApplicationController def create head :ok end end
p = cookies.signed[:username] p #messages p = form_for :message, url: messages_path, remote: true, id: 'messages-form' do |f| p = f.label :body, ' :' p = f.text_field :body p = f.submit ''
# app/channels/application_cable/connection.rb module ApplicationCable class Connection < ActionCable::Connection::Base end end # app/channels/application_cable/channel.rb module ApplicationCable class Channel < ActionCable::Channel::Base end end # app/channels/messages_channel.rb class MessagesChannel < ApplicationCable::Channel def subscribed stream_from 'messages' end end
development: &dev :url: redis://localhost:6379 :host: localhost :port: 6379 :timeout: 1 :inline: true test: *dev production: *dev
# cable/config.ru require ::File.expand_path('../../config/environment', __FILE__) Rails.application.eager_load! require 'action_cable/process/logging' run ActionCable.server
# /bin/bash bundle exec puma -p 34523 cable/config.ru
class MessagesController < ApplicationController def create ActionCable.server.broadcast 'messages', message: params[:message][:body], username: cookies.signed[:username] head :ok end end
#app/assets/javascripts/channels/messages.coffee App.messages = App.cable.subscriptions.create 'MessagesChannel', received: (data) -> $('#messages').append("<p><b>[#{data.username}]:</b> #{data.message}</p>") #app/assets/javascripts/channels/index.coffee #= require cable #= require_self #= require_tree . @App = {} App.cable = Cable.createConsumer('ws://127.0.0.1:34523')
Source: https://habr.com/ru/post/264589/
All Articles