发送后,广播消息将不会显示在浏览器控制台中,动作电缆和Redis开发环境

时间:2018-09-29 04:05:23

标签: ruby-on-rails redis actioncable

我已经为从redis cli运行服务器的Windows安装了redis设置

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

开发电缆.yml是

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对象吗?

** 编辑 **

创建另一个Redis服务器实例

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

打开另一个cli

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

它同时传输到Rails服务器和订阅的Redis服务器

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

2 个答案:

答案 0 :(得分:1)

我认为它对您第一次尝试不起作用的原因可能是由于在命名received函数时出现错字。您改为recieved

答案 1 :(得分:0)

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无法正常工作。