2016-05-20 3 views

Antwort

2

Interessanterweise scheint es, dass ab Rails 5.0.0.rc1 Sie das Ping-Intervall nicht konfigurieren können. Es ist als Konstante in der ActionCable::Server::Connections module definiert.

Sie könnten wahrscheinlich diese Konstante in einem initializer neu zu definieren, um die Server-Pings in unterschiedlichen Intervallen senden zu machen, aber dies würde noch nicht am Ende helfen, weil der Client-Code, den die Pings empfängt auch eine statisch definierte Timeout hat (set für 6 Sekunden, dh zwei Pings vom Server verpasst). Wenn es das 6-Sekunden-Timeout ohne einen Ping vom Server erreicht, versucht es eine erneute Verbindung. Und ich bin mir nicht sicher, wie Sie this constant in the Javascript client code überschreiben könnten.

Ausgehend von this github issue gibt es einige damit zusammenhängende Diskussionen über mögliche Möglichkeiten, das Pings-Verhalten zu verbessern, um nützlicher zu sein, z.B. unter Berücksichtigung der Netzwerklatenz.

Aber im Wesentlichen ist das Intervall im Moment nicht konfigurierbar und es sei denn, Sie wollten ein Ping-Intervall kleiner als 3 Sekunden, ich sehe keine einfache Möglichkeit, es in Rails jetzt zu überschreiben.

6

Erweiterung auf @ Borama Antwort:

Sie die Konstante auf der Backend-Seite wie diese außer Kraft setzen kann:

# config/initializers/action_cable.rb 
module ActionCable 
    module Server 
    module Connections 
     BEAT_INTERVAL = 5 
    end 
    end 
end 

Auf der Client-Seite, müssen Sie auch den Wert außer Kraft setzen:

// this should be after //= require action_cable 
// but before any App.cable.subscriptions.create call 
// the value here *must* be 2 times the backend's value 
ActionCable.ConnectionMonitor.staleThreshold = 10; 

Bitte beachten Sie, dass dieser Ansatz in der Regel eine wirklich schlechte Idee ist: das Durcheinander mit internen Variablen ist eine der direkten Möglichkeiten zu Bugs und Problemen.

In der Tat, Rubin wird auch Sie warnen:

config/initializers/action_cable.rb:7: warning: already initialized constant ActionCable::Server::Connections::BEAT_INTERVAL 

verwenden nur, wenn Sie wissen, was Sie tun.