【问题标题】:Unable to use wscat to connect to an ActionCable WebSocket on Ruby on Rails 5 Beta无法使用 wscat 连接到 Ruby on Rails 5 Beta 上的 ActionCable WebSocket
【发布时间】:2016-04-08 19:25:07
【问题描述】:

我运行了 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,它们运行良好。

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

【问题讨论】:

  • @tw-airball 感谢评论。我的路线文件包括mount ActionCable.server => '/cable'。我试过wscat -c ws://localhost:28080/cable,但看到同样的错误error: Error: connect ECONNREFUSED
  • 你有想过这个吗?我可以使用 telnet 会话很好地连接,即telnet localhost 3000 并进行手动 websocket 升级,但 wscat -c ws://localhost:3000 每次都失败并出现 error: Error: connect ECONNREFUSED 127.0.0.1:3000。 Rails 日志中没有任何内容,好像它真的从未收到过请求
  • 顺便说一句,我可以让它工作的唯一方法。是将 Rails 绑定到主机 0.0.0.0rails server -b 0.0.0.0

标签: websocket ruby-on-rails-5 actioncable


【解决方案1】:

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

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

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

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

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

来自wscat 的Websocket 连接将在未通过身份验证的情况下被拒绝。您需要对此进行调整以满足您的需求。

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

祝你好运!

【讨论】:

  • 您能否让您的 iOS 应用程序与 ActionCable 通信?你能分享你的经验吗?
  • @Griever 是的,我们有一个生产中的应用程序(!),为了建立套接字,我使用了 SocketRocket。您需要手动发送订阅频道的消息。
  • 太棒了!一篇博文会很棒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2018-09-24
  • 2019-10-23
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
相关资源
最近更新 更多