gpt4 book ai didi

javascript - Action Cable 仅向客户端发送欢迎和 ping 消息

转载 作者:可可西里 更新时间:2023-11-01 11:23:19 25 4
gpt4 key购买 nike

我能够让我的 Action Cable 正常工作,订阅也可以正常工作......

目前,我有一个简单的 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 输出已确认订阅存在,我的页面是控制台记录 ping 消息和来自 websocket 的欢迎消息。

如果我尝试广播任何东西作为测试(通过控制台或其他方式)

ActionCable.server.broadcast "tv_channel_1e80f418-08b0-478a-a77c-67a052934433", {message: "oh hai"}

它没有被客户端接收到...

我已经通过 brew 安装了 Redis,并在我的 cable.yml 文件中安装了以下内容

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 文件( channel 编码用于测试)

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

我的电视 channel .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,没有我正在为其提供服务的 View 。HTML 页面是独立的,不在 Rails 环境中。

最佳答案

我希望如果不出意外,这对其他人有帮助。

我需要实际发送订阅字符串。

    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" }
)
}
)

关于javascript - Action Cable 仅向客户端发送欢迎和 ping 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57320156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com