我运行了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
更糟糕,它因内核死机而崩溃。
我还用其他WebSocket测试了wscat
和wsd
,包括WebSocket回声测试http://www.websocket.org/echo.html,他们工作得很好。
我被难住了。有什么建议吗?
1)通过独立服务器启动ActionCable。(这一步骤需要验证,但由于ActionCable文档目前仍不清楚,我将只布局我为实现这一目标所做的步骤)。
在rails 5.0.0beta1
上运行bin/cable
应该会在端口28080上启动puma。
(protip:确保你没有其他冲突的puma进程在config/puma.rb上运行,因为puma将默认加载。你会记住这一点,并在稍后尝试部署rails应用程序时感谢我)
2) ActionCable::Connection::Base
处理所有传入连接,并决定如何识别用户(例如current_user
)或拒绝未经授权的连接。
从可操作的示例(https://github.com/rails/actioncable-examples)这是由CCD_ 12中的cookie定义的。
来自wscat
的Websocket连接将在未通过身份验证的情况下被拒绝。您需要对此进行调整以满足您的需求。
ActionCable还有很多其他的"惊喜"。我希望更新这篇文章和/或写一篇博客文章,记录我让iOS客户端与ActionCable对话的经历。
祝你好运!