无法使用 wscat 连接到 Ruby on Rails 5 Beta 上的 ActionCable WebSocket

lan*_*ess 6 websocket ruby-on-rails-5 actioncable

我运行了 Rails 5 Beta 附带的 ActionCable 聊天室示例。Web 应用程序运行良好,数据在 WebSocket 上流动。

wscat但是,当我尝试从命令行直接连接到 WebSocket 时,出现连接错误。

连接wscat尝试:

wscat -c ws://localhost:3000/cable
Run Code Online (Sandbox Code Playgroud)

错误响应:

error: Error: connect ECONNREFUSED
Run Code Online (Sandbox Code Playgroud)

起初,我认为 Rails 伪造保护禁止连接。所以我添加了以下内容config/environments/development.rb

config.action_cable.disable_request_forgery_protection = true
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了同样的连接错误。

我尝试使用wsd命令行 util 连接到 ActionCable WebSocket。wsd更糟糕的是,它因内核恐慌而崩溃。

我还测试了两者wscat以及wsd其他 WebSocket,包括 WebSocket Echo Test http://www.websocket.org/echo.html,它们工作得很好。

我很困惑。有什么建议么?

tw *_*all 1

1) 通过独立服务器启动 ActionCable。(此步骤需要验证,但由于 ActionCable 文档目前仍不清楚,我将仅布局我为完成此工作所做的步骤)。

运行bin/cable应该rails 5.0.0beta1会在端口 28080 上启动 puma。

(专业提示:确保您没有在 config/puma.rb 上运行其他冲突的 puma 进程,因为 puma 将默认加载。当您尝试部署 Rails 应用程序时,您会记住这一点并感谢我)

2)ActionCable::Connection::Base处理所有传入连接并决定如何识别用户(例如current_user)或拒绝未经授权的连接。

从 actioncable 示例 ( https://github.com/rails/actioncable-examples ) 中,这是由 中的 cookie 定义的/app/channels/application_cable/connection.rb

如果没有通过身份验证,来自的 Websocket 连接wscat将被拒绝。您需要对此进行调整以满足您的需求。

ActionCable还有很多其他的“惊喜”。我希望更新这篇文章和/或制作博客文章,记录我让 iOS 客户端与 ActionCable 对话的经验。

祝你好运!