我运行了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
命令行util连接到ActionCable WebSocket。 wsd
更糟糕,它因内核恐慌而崩溃。
我还使用其他WebSockets测试了wscat
和wsd
,包括WebSocket Echo Test http://www.websocket.org/echo.html,它们运行良好。
我很难过。有什么建议吗?
答案 0 :(得分:0)
1)通过独立服务器启动ActionCable。 (这一步需要验证,但由于ActionCable文档目前仍然模糊不清,我将仅仅布置我为完成这项工作而采取的步骤)。
在bin/cable
上运行rails 5.0.0beta1
会在端口28080上启动puma。
(protip:请确保你没有在config / puma.rb上运行其他冲突的puma进程,因为puma将默认加载。你会记住这一点并在以后尝试部署rails app时感谢我)
2)ActionCable::Connection::Base
处理所有传入连接并决定如何识别用户(例如current_user
)或拒绝未经授权的连接。
来自actioncable示例(https://github.com/rails/actioncable-examples),这是由/app/channels/application_cable/connection.rb
中的Cookie定义的。
来自wscat
的Websocket连接将在没有通过身份验证的情况下被拒绝。您需要调整它以满足您的需求。
ActionCable仍然有很多其他的惊喜"。我希望更新这篇文章和/或制作博客文章记录我让iOS客户端与ActionCable交谈的经历。
祝你好运!