如何检测ActionCable订阅请求是否失败

时间:2018-01-27 20:29:06

标签: ruby-on-rails actioncable

我最近部署了一个Rails应用程序,并且从一些用户那里听说它在他们的工作环境中没有工作。很明显,Websockets被阻止了。

我已经通过Rails文档搜索了这个,但无法找到有关如何检测是否发生这种情况的任何信息。我最好的猜测是为ActionCable广播发送一个AJAX请求,并且在某个超时后没有收到该广播时,得出结论必须阻止Websockets。

这里是否有任何简单的答案,可能已经是Rails API的一部分,以确定Websocket连接?

2 个答案:

答案 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