Christian Kruse: Regelmäßiges oder asynchrones Polling?

Beitrag lesen

Hallo Martin,

ich frage mich langsam, was die gelegentlich im grünen Balken am oberen Fensterrand aufpoppende Meldung "Es gibt 1 neue Nachrichten und 0 neue Threads" auslöst. Oder besser gesagt, wann die dazu gehörende Abfrage (AJAX?) stattfindet. Ich konnte noch keine wirkliche Regelmäßigkeit feststellen.

Das ist keine regelmässige Abfrage, sondern das wird über Push bei einer neuen Nachricht geschickt. AJAX ist das nur wegen des Fallbacks auf long polling von Websockets, weil ich noch nicht dazu gekommen bin ein Nginx-Paket von Hand zu bauen, dass neu genug ist, um als Wegsocket-Proxy dienen zu können.

Ich habe jedenfalls den Eindruck, dass das Erscheinen dieser Meldung relativ willkürlich und zufällig ist. Schon mehrfach ist mir diese Meldung aufgefallen, ich habe daraufhin die Thread-Liste neu geladen und festgestellt: Nö, da ist nichts. Aber zwei bis drei Minuten vorher gab es tatsächlich irgendwo eine neue Nachricht. Kommt die Meldung so lange zeitverzögert? Dann wäre sie eigentlich witzlos.

Nein, das sollte nicht der Fall sein. Aus cf_threads_controller.rb:

if not @preview and saved
  publish('/threads/' + @thread.forum.slug, {type: 'thread', thread: @thread, message: @message})
  publish('/threads/all', {type: 'thread', thread: @thread, message: @message})

  notification_center.notify(NEW_THREAD_SAVED, @thread, @message)

  format.html { redirect_to cf_message_url(@thread, @message), notice: I18n.t("threads.created") }
  format.json { render json: @thread, status: :created, location: @thread }
end

Die publish-Zeilen sind die relevanten.

Ich äußere deshalb ein Feature Request, diese Meldung (und auch alle anderen Hintergrund-Aktivitäten, sofern es weitere gibt) per User-Config abstellbar zu machen. Denn ...

Die Meldung ist nur für den Übergang relevant, denn ich möchte das, wie ich bereits mehrfach erwähnt habe ;-), ersetzen durch JavaScript, dass die neuen Postings und Threads direkt an die richtige Stelle anhängt, ohne dass ein Reload nötig ist. Dazu bin ich nur noch nicht so richtig gekommen.

LG,
CK