5

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

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

wscat连接尝试:

wscat -c ws://localhost:3000/cable

错误响应:

error: Error: connect ECONNREFUSED

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

config.action_cable.disable_request_forgery_protection = true

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

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

我还对其他 WebSocket 进行了测试wscatwsd包括 WebSocket Echo Test http://www.websocket.org/echo.html,它们运行良好。

我难住了。有什么建议么?

4

1 回答 1

1

1) 通过独立服务器启动 ActionCable。(这一步需要验证,但由于 ActionCable 文档目前仍然模糊不清,我将只安排我为完成这项工作所做的步骤)。

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

(提示:确保您没有在 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 对话的经历。

祝你好运!

于 2016-01-29T04:18:48.243 回答