问题标签 [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 投票
0 回答
682 浏览

ruby-on-rails - Actioncable 进程的自定义日志记录详细程度

我有以下Procfile:

action_cable进程和 rails 进程都使用通过 .bashrc 变量导出的$ webRAILS_ENV 变量,设置哪个环境 rails 引导。action_cable因此,运行 foreman start 会同时为和加载测试环境web。但是,我希望 actioncable 使用:infoLog Level,并且我希望 web rails 进程使用fatal.

有没有办法可以启动两个进程并使用 ENV 或进程信息来动态设置日志级别?

类似的东西(伪代码):

0 投票
1 回答
3573 浏览

ruby-on-rails - Rails 5 ActionCable WebSockets 未返回状态为 101 升级响应的升级标头

编辑:显示在最后,发现实际上创建了升级标头。

我正在使用action-cable-example代码库,尝试构建一个 WebSocket 应用程序。依赖于应用程序中提供的浏览器客户端的“Chatty”应用程序运行良好。但是,我不会使用该客户端,因为我需要外部 IoT 连接。因此,我正在尝试将 ws/wss WebSocket 协议实现到外部非浏览器设备,并且我在 route.rb 中的连接是:

我已经尝试了几个外部客户端,例如 Chrome Simple WebSocket Client 扩展和 gem websocket-client-simple使用 sample/client.rb。在这两种情况下,ActionCable 都不返回升级标头。Chrome 扩展程序抱怨如下:

实际的握手表明这是真的,如:

根据标准,响应标头应为:

Sec-WebSocket-Accept 尤其重要,因为它是基于请求标头的 Sec-WebSocket-Key 的计算,以确认 ws/wss 被理解并且应该发生交换协议。

在所有这些过程中,服务器会更开心,直到客户端被勾选并关闭连接:

查看 websocket-client-simple,我分解了返回到 client.rb 的 WebSocket,它还显示了空头。我正在显示代码,然后是 WebSocket:

在此响应中,我注意到实例变量“@handshaked”返回为 false。这可能是相关的,但到目前为止我还没有找到在代码中设置或引用的位置。

更新:发现 WebSocket::Driver.start 实际上创建了升级标头。而且,@socket.write(response)应该通过 EventMachine 将它们发送出去。代码:

握手响应是:

0 投票
1 回答
2931 浏览

ruby-on-rails - ActionCable vs Socket.Io 是最可靠和最可扩展的?

哪一个是最可靠和最可扩展的?ActionCable 还是 Socket.io?

为了避免基于意见的答案,请提供一些证明假设的真实测量数据。

由于 ActionCable 已经推出一年,生产中是否有任何应用程序是使用 ActionCable 实现的?

谢谢

0 投票
0 回答
627 浏览

ruby-on-rails-5 - 使用 ActionCable 刷新页面?

我在 rails 4 中构建了一个支持仪表板,以帮助支持团队监控客户交付文件的运行状况和时间。

我想将此应用程序转换到 Rails 5 并利用 ActionCable 使应用程序实时运行。

我能找到的每一个 ActionCable 示例都只是一些聊天应用程序或使用设计的超级特定实现,我找不到任何通用教程示例来展示如何在新数据可用时“强制”刷新页面。因此,当文件被扫描并且数据进入刷新页面或更高级的设置时,将部分(即表格行)附加到表格的顶部。

所以我在这里得到的是,有没有人知道 ActionCable 的一般教程,它只是使用 ActiveRecord 作为触发器刷新页面,或者这样的事情是否可能呢?

0 投票
1 回答
511 浏览

ruby-on-rails - 似乎 sidekiq 不支持 Rails5 中的 actioncable?

所以我试图在其中一个工作中广播一条消息。该作业正在执行,但它没有广播消息。是不是因为 actioncable 需要 Puma 进行消息广播?

0 投票
1 回答
783 浏览

ruby-on-rails - Rails 5.0.0 Actioncable 通过代理

我有一个使用 Puma 和 Nginx 1.10 部署到 vps 的聊天应用程序,我的 nginx 配置如下:

这是我的电缆 config.ru 文件:

在环境/生产.rb

我的客户端通过代理服务器连接到 Internet,在 chrome 控制台中出现以下错误:

WebSocket 连接到“ws://ahu.mydomain.ir/cable”失败:通过代理服务器建立隧道失败

在另一个没有代理的客户端中,一切正常。

0 投票
3 回答
5250 浏览

ruby-on-rails - 动作线无法连接(升级到 WebSocket 失败)

我在使用这些日志消息连接到非开发环境中的 websocket 时遇到问题

我调试了一下,发现浏览器/javascript发送的请求与unicorn(使用nginx运行)收到的请求不完全相同。

浏览器的请求头是

这里的连接是“升级”,但 websocket 请求的连接是“关闭”的(可能是 nginx 搞砸了?)

而websocket驱动程序中的这段代码失败了

更新

这是我的 nginx 配置

我已经在 /cable 上安装了 actioncable 服务器

通过 nginx 更改,我能够成功握手,但服务器无法发送心跳并且连接不断下降。

0 投票
1 回答
1151 浏览

nginx - 无法连接到 Elastic Beanstalk 上的 ActionCable

我正在尝试在运行 Nginx 和 Puma 的 Elastic Beanstalk 上部署带有 ActionCable 的 Rails 5.0 应用程序。

.ebextensions/nginx.config我有以下内容:

location /cable { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade websocket; proxy_set_header Connection upgrade; }

并且在config/environments/production.rb

config.action_cable.allowed_request_origins = [ 'http://####.####.com', /http:\/\/####.*/ ]

将应用程序部署到 Elastic Beanstalk 环境后,我在 Chrome 控制台中出现此错误:

与“ws://####.####.com/cable”的 WebSocket 连接失败:在建立连接之前 WebSocket 已关闭。

我已尝试遵循此线程中的建议,但最终却收到此错误:

WebSocket 连接到“ws://####.####.com/cable”失败:WebSocket 握手期间出错:意外响应代码:404

这是我的.ebextensions/nginx.config文件目前的样子。

任何帮助将不胜感激。

0 投票
2 回答
1083 浏览

callback - Rails Actioncable 成功回调

我使用 perform javascript 调用在服务器上执行操作,如下所示:

但是,据我所见,似乎没有内置的javascript“成功”回调,即让我知道该操作在服务器端结束(或可能失败)。我正在考虑在动作结束时发送广播,如下所示:

但所有订阅此“房间”的客户都会收到该消息,可能会导致误报。此外,据我所知,消息顺序不能保证,因此此操作中的先前广播可能会在成功消息之后传递,可能会导致进一步的问题。

对此有任何想法还是我完全错过了什么?

0 投票
1 回答
6558 浏览

ruby-on-rails - WebSocket 连接到“ws://example.com/cable”失败:意外响应代码:404

我在 Rails 5.0.0 上创建了一个项目。

此外,我在此视频中所做的完全一样:https ://www.youtube.com/watch?v=n0WUjGkDFS0

生成的频道除外。我生成了两个频道:聊天和评论。

我也并行阅读:https ://github.com/rails/rails/tree/master/actioncable

在 routes.rb 我添加了这一行:

mount ActionCable.server => '/cable'

在 application.rb 我添加了这一行:

config.action_cable.mount_path = '/cable'

结果,我运行了这个命令的一个项目:

rails server -b SERVER_IP -p 3020

此错误显示在控制台浏览器中:

WebSocket 连接到“ws://site.com/cable”失败:意外响应代码:404

运行项目的一段日志:

错误可能是什么?我究竟做错了什么?

定义:

  • SERVER_IP - 这伪装了服务器的原始 IP 地址。

  • example.com- 这伪装了网站的原始 URL。