问题标签 [actioncable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3418 浏览

ruby-on-rails - Rails 5 应用程序(Action Cable)作为 Socket.io 服务器和客户端

我现在熟悉 Action Cable(Rails 5 功能)作为 websocket 的发射器或服务器。但是,我应该使用一个通过 websockets 发送数据的 API(例如'socket.provider.com?token=12345')。

我使用 socket.io-client-simple ( https://github.com/shokai/ruby-socket.io-client-simple ) 对一个普通的 Ruby 文件进行了一些测试,它可以工作,但我不确定这是如何工作的将在已部署的 Rails 应用程序上工作。我猜我需要一个单独的进程来不断地监听 API 提供者发出的事件。有没有人做过类似的事情?我将使用 Heroku 进行部署。

注意:我认为使用客户端方法接收 websocket,然后将它们发布到我的 Rails 应用程序(即 Javascript Socket.IO 库)不是一种选择,因为我需要接收并保留来自事件的一些数据实时而不依赖于至少一个客户端的连接。

我还想知道是否有任何方法可以自动将 Action Cable 设置为以某种方式充当“事件侦听器”。到目前为止,还没有阅读任何关于该主题的内容,但希望看到有关该方向的一些建议。

更新:这是迄今为止我用来连接到提供商的 websockets API 的 Ruby 代码:

0 投票
1 回答
3450 浏览

javascript - Ruby on Rails、ActionCable、消息不显示

感谢您提前提供帮助!

我是 Rails 新手,一直在尝试遵循本指南:https ://www.youtube.com/watch?v=tyNepRO_ERc&feature=youtu.be

过去我在学校忙之前就实施了 ActionCable,当时并非没有一些麻烦——现在它又给我带来了麻烦。我在该视频中到达 17:00 分钟时没有问题,一切都说得通——但是,当我发送命令时,它没有显示任何消息。

所以,我所看到的:

“hello world”出现了,但没有任何给定的输入(甚至在重新加载页面时也没有)

首先在我的终端:

在 2016-05-23 21:45:00 -0600 开始为 ::1 获取“/cable”

在 2016 年 5 月 23 日 21:45:00 -0600 开始为 ::1 获取“/cable/”[WebSocket]

成功升级到 WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)

RoomChannel 正在发送订阅确认

RoomChannel 正在从 room_channel 流式传输

RoomChannel#speak({"message"=>"Travis: Neat!"})

[ActionCable] 广播到 room_channel:“Travis:整洁!”

RoomChannel 传输“Travis:Neat!” (通过从 room_channel 流式传输)

网页控制台:

App.room.speak('特拉维斯:整洁!')

真的

我可以发布一些代码,我应该发布一些代码,但我相当确定我的所有代码都遵循视频。我将对其进行一段时间的整理,我只是更多地寻找任何提示/见解/帮助以检查其他想法/事物。在我之前尝试实现 ActionCable 时,我也遇到过类似的问题,消息甚至会被发送并处理,但直到重新加载网页后才会显示。

感谢您的任何帮助,

...好吧,我想我最好先放一些代码:

javascripts/channels/room.coffee

javascripts/cable.coffee

频道/room_channel.rb

/控制器/rooms_controller.rb

/models/message.rb

/views/messages/_message.html.erb

/views/rooms/show.html.erb

/config/environments/development.rb(我在这里插入了这一行,这实际上解决了我几个月前尝试使用 ActionCable 时的问题)

/config/cable.yml

/config/database.yml

老实说,我知道,我的 Gemfile 是一团糟:

启动服务器时我的终端

[回应格雷厄姆·斯利克]

App.room.speak('这有效吗?') true

————————————————————————</p>

这行得通吗?

————————————————————————</p>

添加代码:(Javascripts/channels/room.coffee)

0 投票
1 回答
1601 浏览

sockets - Rails 5 ActionCable 问题,为 Web 套接字运行多个通道

snlamm和我在我们的 Rails 应用程序中实现多个 Web 套接字通道时遇到问题。错误是服务器在以下响应后冻结:

注意:我们的浏览器控制台不会抛出任何错误。我们正在使用 Chrome v 50.0(最新版本)。

但是,如果我们重新启动浏览器和服务器,我们会在不一致的基础上得到:

一切正常。

如前所述,此修复程序不一致,而且我们的服务器经常冻结。我们注意到,当我们只运行一个通道时没有问题。

这是我们的项目通道代码,它是我们添加的两个通道之一。两个通道的代码几乎相同:

路线

频道/application_cable/channel.rb

频道/application_cable/connection.rb

频道/items_channel.rb

意见/订单/show.html.erb

这是我们对附加到显示项目的通道的视图。

控制器/items_controller.rb

资产/application.js

资产/javascripts/channels/chatrooms.js

资产/javascripts/channels/items.js

结束服务器后我们 ps aux | 对于 rails、ruby、puma、redis 的 grep,它们都已成功关闭(即没有僵尸进程)。什么可能导致服务器冻结?

0 投票
2 回答
857 浏览

ruby-on-rails - ActionCable:从通道重定向到路径或动作

如何从 n_channel.rb 重定向到路径?

我不能使用redirect_tolink_to

什么是最好的方法?

0 投票
1 回答
961 浏览

ruby-on-rails - 如何使用 actioncable 回复消息给发件人客户端?

在 socket.io 中,您可以向发件人回复消息,例如:

但在导轨中:

0 投票
2 回答
886 浏览

ruby-on-rails - 让 AuthLogic 与 ActionCable 一起工作

我正在开发一个新的 Rails 5 (RC1) 应用程序。我使用 AuthLogic 进行用户身份验证,它一如既往地运行良好,直到我使用 ActionCable。

我收到错误消息:您必须在创建对象之前使用控制器对象激活 Authlogic::Session::Base.controller

我试过了:

但这不起作用,因为 Connection 类不是 Controller。

我查看了 AuthLogic 代码,但不知道如何绕过它对控制器对象的依赖。我只需要加载用户的会话。有什么想法吗?

0 投票
1 回答
864 浏览

ruby-on-rails - 使用 ActionCable 让用户保持“在线”

我的代码很大程度上取决于用户是否在线。

目前我已经像这样设置了 ActionCable:

现在我最想介绍的是用户只是关闭浏览器而不是离线的情况。然而,取消订阅的问题是它会进行页面刷新。因此,每次他们刷新页面时,他们都会触发unsubscribed. 因此,即使他们认为它们可用,它们也会被设置为不可用。

现在关键是可用不是默认设置,所以我可以把它放回去,这是用户为了接收请求而选择的。

有没有人有处理此类案件的最佳方式的经验?

0 投票
2 回答
2865 浏览

ruby-on-rails - Rails ActionCable 中“无法找到带有标识符的订阅”的原因是什么?

我正在使用 Rails 5.0.0.rc1 + ActionCable + Redis 构建一个信使应用程序。

我有单通道ApiChannel和许多动作。有一些“单播”动作 -> 请求某些东西,取回某些东西,以及“广播”动作 -> 做某事,将有效负载广播到一些连接的客户端。

我不时RuntimeError从这里得到异常:https Unable to find subscription with identifier (...) ://github.com/rails/rails/blob/master/actioncable/lib/action_cable/connection/subscriptions.rb#L70 。

这可能是什么原因?在什么情况下我会得到这样的异常?我花了很多时间来调查这个问题(并将继续这样做),任何提示将不胜感激!

0 投票
1 回答
74 浏览

ruby-on-rails - 如何使用 ActionCable 中的密钥进行身份验证

我能够使用 cookie 进行身份验证,ActionCablecookies.signed[:user_id]我不知道如何使用密钥进行身份验证。例如,Authorization在建立连接时发送标头。

类中唯一可访问的变量ApplicationCable::Connectioncookies. 其他变量 (paramsheaders) 不可用。

有任何想法吗?

0 投票
2 回答
1990 浏览

ruby-on-rails - 在页面更改时检测从 Action Cable 退订

我正在 Rails 中构建一个聊天室类型的系统,我需要检测用户何时离开服务器上的频道(即关闭页面),以便我可以更新活动用户列表。我在 GitHub 上搜索了文档和示例,但似乎找不到答案。

我过去使用过 SignalR,它会触发断开连接事件,但我在 Rails 5 中找不到等效的(如果确实存在的话)。

我可以在频道类中看到带有取消订阅方法的示例,但是无论我导航到新页面还是完全关闭浏览器,这都不会触发。

编辑:不确定这是否有帮助,但我没有使用 turbolinks。