我能够使我的动作电缆正常工作,并且订阅该剧,而不会发生任何戏剧性事件...
现在,我有一个简单的HTML页面,上面带有一些JS,用于连接和记录WebSocket消息。
这是我在HTML页面上正在使用(现在要测试)的脚本
var socket = new WebSocket('ws://localhost:3000/cable');
socket.onopen = function(e) {
console.log("Connection established")
}
socket.onclose = function(e) {
console.log("Error occurred.");
clients.Remove(socket)
}
socket.onmessage = function(e){
var server_message = e;
console.log(server_message);
}
JSON.stringify(
{
"command": "message",
"identifier": JSON.stringify({"channel": "tv_channel_1e80f418-08b0-478a-a77c-67a052934433" }),
"data": {
"action": "start_broadcasting"
}
}
)
我的rails输出已确认存在订阅,并且我的页面是控制台,其中记录了来自Websocket的ping消息和欢迎消息。
如果我试图通过测试(例如通过控制台或其他方式)广播任何内容
ActionCable.server.broadcast "tv_channel_1e80f418-08b0-478a-a77c-67a052934433", {message: "oh hai"}
它不会被客户接走...
我已通过brew和以下电缆在我的cable.yml文件中全部安装了Redis
development: &development
adapter: redis
url: redis://localhost:6379
test:
adapter: redis
url: redis://localhost:6379
production:
adapter: redis
url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
channel_prefix: can-i-haz-dashboard-server_production
我能够通过redis-cli确认消息正在传递到redis数据库。
我唯一能找到的答案就是安装Redis。
我的connection.rb文件(已编码用于测试的通道)
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_channel
def connect
self.current_channel = ::Channel.find("1e80f418-08b0-478a-a77c-67a052934433")
end
private
def find_channel
end
end
end
我的TvChannel.rb
class TvChannel < ApplicationCable::Channel
def subscribed
# stream_from "some_channel"
stream_from "tv_channel_#{current_channel.id}"
ActionCable.server.broadcast "tv_channel_#{current_channel.id}", 'Test message'
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
def start_broadcasting
"hello"
end
end
我希望我做错的很简单。任何帮助将不胜感激。
编辑:对不起,不确定我是否足够清楚。我的Rails应用程序仅适用于websocket的API,没有提供服务的视图。 HTML页面是独立的,不在Rails环境中。
答案 0 :(得分:1)
太好了,我希望这对别人有帮助。
我需要实际发送订阅字符串。
socket.onopen = function(e) {
console.log("Connection established")
socket.send(subscribeString)
}
subscribeString = JSON.stringify(
{
"command": "subscribe",
"identifier": JSON.stringify(
{"channel": "channels:1e80f418-08b0-478a-a77c-67a052934433" }
)
}
)