我最近部署了一个Rails应用程序,并且从一些用户那里听说它在他们的工作环境中没有工作。很明显,Websockets被阻止了。
我已经通过Rails文档搜索了这个,但无法找到有关如何检测是否发生这种情况的任何信息。我最好的猜测是为ActionCable广播发送一个AJAX请求,并且在某个超时后没有收到该广播时,得出结论必须阻止Websockets。
这里是否有任何简单的答案,可能已经是Rails API的一部分,以确定Websocket连接?
答案 0 :(得分:0)
您可以使用rejected
处理程序。当订阅被服务器拒绝时,这应该触发。
以下coffeescript示例来自official rails docs。
App.cable.subscriptions.create "AppearanceChannel",
# Called when the subscription is ready for use on the server.
connected: ->
// Do something
# Called when the subscription is rejected by the server.
rejected: ->
// Do something
答案 1 :(得分:0)
每条动作电缆连接失败时,它将写入浏览器控制台failed: WebSocket is closed before the connection is established
您可以利用它来了解是否存在连接错误:
def action_cable_connection_errored?
page.driver.browser.manage.logs.get(:browser)
.map(&:message)
.join
.match('failed: WebSocket is closed before the connection is established')
end