Frage

Wir haben eine Website und wir entwickelten ein Chat-System für sie strophe.js Bibliothek und ejabberd XMPP-Server. Wir verwenden Session-Anlage, die mit PHP (mit einer hauseigenen Bibliothek) initiiert wurde. Was wir tun, ist das RID und SID aus dem PHP-Skript bekommen, dann strophe Sitzung Anhang verwenden. Die genannte RID und SID auf einem Cookie gespeichert und der RID-Wert auf dem Cookie wird jede Aktualisierung des RID auf strophe.js aktualisiert.

Das funktioniert gut, nach der Anmeldung erhalten wir den Anwesenheitsstatus eines jeden unserer Kontakte. Das Problem dabei ist, wenn Sie auf eine andere Seite auf der Website gehen und attach mit der genannten RID (wir der inkrementierte Wert von strophe produziert verwenden) und SID, würde der Server nicht mehr Anwesenheitsinformationen Ihrer Kontakte senden im Gegensatz zu wenn Sie angemeldet sind. Dies führte zu unseren Kontakten Bereich alle unsichtbar erscheinen, obwohl sie online sind. Sie würden nur online angezeigt werden, wenn Sie (oder Ihr Kontakt) auf dem Chat ausloggen, dann melden Sie sich erneut (da Sie ein Präsenz-Update aus dem XMPP-Server empfangen werden).

Ich habe eine Abhilfe geschrieben, in dem der Anwesenheitsstatus Ihrer Kontakte auf einem Cookie gespeichert wird (alle Online-Kontakte werden ihre JIDs auf dem Cookie gespeichert haben), wenn eine Anwesenheit vom Server empfangen wird. Dies wird jede Seite zu laden, überprüft, ob das Cookie gesetzt wird, wird es zu lesen, und alle JIDs auf dem Cookie werden als Online markiert werden. Das funktioniert gut, aber es könnte einige besseren Möglichkeiten, dies zu lösen, Verhaltensweisen mit dem Standard des XMPP.

War es hilfreich?

Lösung

XMPP-Server sendet Anwesenheit Sonden an alle Ihre Kontakte in Ihrem Namen, wenn Sie Ihre eigene anfängliche Präsenz an den Server senden. Von da an werden Sie nur Anwesenheitsstatus ändert sich von Ihren Kontakten erhalten.

Wenn Sie den Anwesenheitsstatus Ihrer Kontakte verlieren, müssen Sie Ihre eigene Präsenz Sonden senden, diesen Zustand wieder herzustellen. Dies ist jedoch wahrscheinlich nicht etwas, das Sie viel tun möchten, und um das Bestehen der Präsenzstatus wird wahrscheinlich in den meisten Fällen bevorzugt.

Sie könnten versuchen, den Staat über XMPP vorbei. Zum Beispiel könnten Sie Privat XML Speicher (XEP-0049), Pubsub (XEP-0060) oder PEP (XEP-0163) verwendet werden.

Eine weitere Option anstelle von Cookies für sie Client-Seite vorbei ist ein HTML5-SharedWorker Objekt zu verwenden, um den Zustand zu halten.

Andere Tipps

Ich schaudere bei dem Gedanken der Skala Eigenschaften im Zusammenhang mit alle Gegenwart Speichern Sie nur vom Server zurück an den Server in der privaten Lagerhaltung erhalten. Private Lagerhaltung fast immer gesichert zur langfristigen Speicherung anstatt im Speicher gespeichert, so dass Sie gehen Ihre Server-Festplatte zu Staub zermahlen.

Wenn Sie mehr Staat im Browser zu speichern und isoliert sie von Browser-Version, und Sie verwenden bereits jQuery, dann jStore ziemlich süß ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top