Передаваемое сообщение не будет отображаться в консоли браузера после отправки, actioncable и redis development env - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть настройка redis для Windows, на которой запущен сервер от redis cli

C:\program files\redis>redis-cli
127.0.0.1:6379>

Development cable.yml is

development:
  adapter: redis
  url: redis://127.0.0.1:6379/0

Канал уведомлений rb

class NotificationsChannel < ApplicationCable::Channel
  def subscribed
    stream_from "notifications_#{current_user.id}"
  end
end

Запустите сервер rails и загрузите страницу, сервер печатает

Started GET "/cable/" [WebSocket] for ::1 at 2018-09-29 13:07:17 +1000
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: keep-alive, Upgrade, HTTP_UPGRADE: websocket)
Registered connection (Z2lkOi8vcGVvcGxlcy9Vc2VyLzUwMQ)
NotificationsChannel is transmitting the subscription confirmation
NotificationsChannel is streaming from notifications_501

notifications.js на странице:

App.notifications = App.cable.subscriptions.create("NotificationsChannel", {
  connected:  function() {
    alert("hello")
  },
  recieved: function(data) {
    console.log(data)
  }
});

Появляется предупреждение о подключении при загрузке страницы.В другом терминале запускается консоль rails

irb> ActionCable.server.broadcast("notifications_501", body: "hello")

Оглядываясь назад на вывод сервера rails

NotificationsChannel transmitting {"body"=>"hello"} (via streamed from notifications_501)

Но консоль не показывает объект JSON?

** Edit **

Создайте еще один экземпляр сервера Redis

C:\program files\redis>redi-cli
127.0.0.1:6379>subscribe "notifications_501"
1)"subscribe"
2)"notifications_501"
3)(integer) 1

Откройте еще один клиент

127.0.0.1:6379>publish "notifications_502" "{\"body\":\"hello\"}"

Он передает на сервер rails и подписанный Redisсервер

NotificationsChannel transmitting {"body"=>"hello"} (via streamed from notifications_501)

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Я думаю, причина того, что это не сработало для вас с первой попытки, может быть из-за опечатки при именовании функции received.Вы сделали recieved вместо.

0 голосов
/ 29 сентября 2018

Измените notifications.js на notfications.coffee и получите такой код

App.notificationss = App.cable.subscriptions.create "NotificationsChannel",
  connected: ->
  # Called when the subscription is ready for use on the server

  disconnected: ->
  # Called when the subscription has been terminated by the server

  received: (data) ->
    alert("hello")
  # Called when there's incoming data on the websocket for this channel

Не уверен, почему обычный JavaScript не работает ..

...