Wir haben eine Website und haben dafür ein Chat-System entwickelt, das die strophe.js-Bibliothek und den ejabberd XMPP-Server verwendet. Wir verwenden Session-Attachment, das mit PHP initiiert wurde (unter Verwendung einer internen Bibliothek). Was wir tun, ist die RID und SID aus dem PHP-Skript zu bekommen, dann verwenden Sie den Session-Anhang von strophe. Die genannte RID und SID werden in einem Cookie gespeichert und der RID-Wert auf dem Cookie wird bei jeder Aktualisierung der RID auf strophe.js aktualisiert. (Dies ist so, dass wir die Sitzungs-ID bei der Seitenaktualisierung/Navigation zu anderen Stellen auf der Site wiederverwenden können)XMPP Web Chat: Wie löst man mehrere Tabs/Fenster auf?
Wir planen nun, dass es auf mehreren Tabs/Windows funktioniert. Ich habe die Facebook-Implementierung beobachtet, und für jede Registerkarte gibt es eine lange Abfrageanforderung an eine bestimmte Domäne. Diese Domäne ist für jede Registerkarte unterschiedlich. Zum Beispiel wäre Tab 1 0.86.channel.facebook.com. Die zweite Registerkarte wäre 1.86.channel.facebook.com. Wie ich verstehe, ist dies die Browser-Beschränkung von 2 aktiven Anfragen auf eine bestimmte Domain zu lösen. Wie wird diese Multi-Domain-Lösung implementiert?
Als nächstes wäre auf den Chat-Sitzungen selbst. Die Chat-Sitzungen wären je nach Tab unterschiedlich, oder? Wie würde die Benutzeroberfläche mit jedem Tab wie Facebook synchronisiert? Meine Idee ist, dass bei jeder Aktion eine Nachricht an die eigene JID des Benutzers gesendet wird, die die mit dem Chat verbundene Aktion enthält. Zum Beispiel würde ein Chat-Fenster zu öffnen eine Nachricht Strophe wie folgt senden:
<message from="my_own_jid" to="my_own_jid" type="chat">
<body>{"jid-of-contact":"open-chat-box"}</body>
</message>
und dies würde auf dem Chat-Client und die Benutzeroberfläche angepasst würde entsprechend (in diesem Fall aufgefangen werden, eine Chat-Box für eine Kontaktöffnung).
Irgendwelche Vorschläge/Kommentare zu dieser Implementierung?
Danke!
Bei Multi-Domain: Eine andere Domain könnte einfach eine Weiterleitung von Anfragen von verschiedenen Domains an den von ihnen verwendeten XMPP-Server sein. Es könnte nur eine "Verkleidung" auf der Seite des Browsers sein. In Bezug darauf, wie man sich unter einem einzigen Benutzernamen an derselben Ressource anmeldet, hmm, ich frage mich, ob FB den XMPP-Server implementiert/modifiziert hat, den sie verwenden, um dies zu erreichen. Es wäre interessant zu wissen. – DashK
Zur Pflege des Benutzeroberflächen-Erscheinungsbilds auf mehreren Registerkarten: Ich frage mich, ob Sie den Datenspeicher von HTML5 verwenden können, um den "Status" des Chats beizubehalten, und jede Registerkarte nur ... auf Aktualisierungen im Datenspeicher reagiert? Gemäß den XMPP-Spezifikationen sollten Sie in der Lage sein, die Ressourcenpriorität zu verwenden, um zu "steuern", wohin Nachrichtenzeilenzeilen gesendet werden. Frage mich, ob du das nutzen kannst, um deinen Mehrfach-Tab-Effekt zu erreichen ... – DashK
@DashKAre loggen sie sich auf derselben Ressource ein? Ich denke, es ist eine andere Sitzung und jeder mit einer anderen Ressource. Auf diese Weise muss der XMPP-Server nicht geändert werden (und mehrere Anmeldungen für denselben Benutzer mit derselben Ressource sind gegen den XMPP-Standard, richtig?). – putolaruan