Ich habe ein iPhone app, wo ich, wie viele Menschen zeigen wollen zur Zeit sehen Sie ein Element als solches:Wie kann ich die aktuelle Anzahl der Zuschauer eines Artikels verfolgen?
ich tue, dass durch diese Transaktion ausgeführt wird, wenn die Menschen einen Blick (Rubymotion Code eingeben unten, aber funktioniert genau wie die Firebase iOS SDK):
listing_reference[:listings][self.id][:viewing_amount].transaction do |data|
data.value = data.value.to_i + 1
FTransactionResult.successWithValue(data)
end
Und wenn sie die Ansicht verlassen:
listing_reference[:listings][self.id][:viewing_amount].transaction do |data|
data.value = data.value.to_i + -
FTransactionResult.successWithValue(data)
end
Es funktioniert die meiste Zeit, aber manchmal läuft es schief. Die App stürzt ab, Leute verlieren Konnektivität oder ähnliche Dinge.
Ich habe "onDisconnect" untersucht, um dies zu lösen - https://firebase.google.com/docs/reference/ios/firebasedatabase/interface_f_i_r_database_reference#method-detail - aber von dem, was ich sehen kann, gibt es keine "inDisconnectRunTransaction".
Wie kann ich sicherstellen, dass die Ansichtsmenge in der Auflistung egal was?
Danke. Ich vermutete, dass so etwas die Lösung sein würde. Können Sie mir sagen, ob onDisconnect narrensicher ist? Funktioniert es als eine Art Timer auf dem Firebase-Server und trennt die Verbindung automatisch, wenn die Verbindung vor mehr als einer Minute unterbrochen wurde? Oder wie funktioniert es, wenn die App plötzlich ausfällt und es keine Zeit gibt, eine Nachricht an Firebase zu senden? –
Und noch eine Frage. Sagen wir, ich habe 10000 Leute, die den gleichen Gegenstand betrachten. Dann scheint es plötzlich ziemlich teuer zu sein, auf "itemViewers" nach Änderungen zu schauen. Ist das etwas, worüber ich mir Sorgen machen sollte? Einfach auf ein "viewers_amount" auf den Gegenstand selbst zu hören, scheint viel weniger kostspielig. Was sind deine Gedanken? –
Wenn der Client die Verbindung ordnungsgemäß trennt, sendet er ein Schließsignal an den Server, und der Handler 'onDisconnect()' wird sofort ausgeführt.Wenn der Client einfach verschwindet, erkennt der Server dies, wenn der Socket abläuft (normalerweise ein paar Minuten, aber das kann variieren). –