Room
que represente cada cuarto que se cree. Cuando un usuario ingresa a un cuarto se suscribe al canal de ese cuarto para recibir los mensajes de otras personas.app/channels/room_channel.rb
- nos permite configurar el canal y recibir información del cliente desde el servidor.app/assets/javascripts/channels/room.coffee
- crea la conexión al canal y nos permite enviar y recibir información al servidor (desde el cliente).ActionCable.server.broadcast
desde cualquier canal, controlador, modelo o helper:rails console
ni desde un background job. Para hacerlo debes utilizar Redis como vamos a ver el final de este capítulo.app/assets/javascripts/channels/room.coffee
:received
se llama cada vez que se recibe un mensaje del servidor. En este caso estamos haciendo un console.log
pero acá podemos, por ejemplo, modificar el HTML para mostrar el mensaje.send
sobre el canal desde cualquier archivo JavaScript (o CoffeeScript). En nuestro ejemplo anterior sería de la siguiente forma:App.room
porque así se llama la variable en app/assets/javascripts/channels/room.coffee
.app/channels/room_channel.rb
:received
se llama cada vez que recibimos información del cliente.subscribed
de nuestro canal en app/channels/room_channel.rb
:stream_from
nos permite nombrar el canal y utilizar parámetros en el nombre.app/assets/javascripts/channels/room.coffee
:create
le vamos a pasar un objeto que tiene el canal y cualquier parámetro adicional que necesitemos (en este caso el name
con valor "micuarto"
).micuarto
, así que lo mejor sería encapsular el código de la suscripción en una función que podamos llamar desde otra parte de nuestro código JavaScript. Modifiquemos room.coofee
:window
, quizá una mejor práctica es almacenarla en App
o en otro objeto para no contaminar el contexto global.app/channels/application_cable/connection.rb
:current_user
que inicializamos en el método connect
(es decir, cuando se abre la conexión con el servidor). Fíjate que es necesario acceder a las cookies para encontrar el id
del usuario.rails console
debes instalar y utilizar Redis.config/cable.yml
, que se puede configurar de la siguiente manera:async
es para desarrollo y testing, no para producción. Este adaptador no permite la comunicación entre procesos.redis
se recomienda para producción y si quieres probar el broadcast
desde rails console
o desde un background job.