12
votes

XMPP plusieurs sessions du même problème d'utilisateur

J'ai implémenté une extension chromée qui permet d'utiliser la discussion XMPP sur la connexion BOSH avec Punjab Server exécuté sur un serveur distant. Il est mis en œuvre à l'aide de la bibliothèque JavaScript Strophe. La question que je rencontre est lorsque j'ai plusieurs sessions du même utilisateur (par exemple deux navigateurs différents sur la même machine), je ne peux pas recevoir et vous connecter à la deuxième fenêtre de discussion du message que j'ai envoyé à partir de la première fenêtre de discussion. Il doit y avoir un mécanisme qui permet de cela. Puis-je recevoir des messages d'une manière ou d'une autre que j'ai envoyé à un autre utilisateur? Le problème peut également être reproduit sur 2 machines différentes ou plus, de sorte que cela doit également être résolu aussi.

merci.


0 commentaires

4 Réponses :


27
votes

Vous devez comprendre comment fonctionnent les Jids, quelles priorités sont et comment envoyer des messages.

Un JID est de la forme: utilisateur @ Domain / ressource Code> P> P> P> Les Jids des utilisateurs connectés doivent être uniques. Typiquement, lorsque vous utilisez un client Web, vous affectez une ressource aléatoire à chaque session afin de ne pas avoir d'affrontement. P>

MAINTENANT, lorsqu'un utilisateur envoie un message, le à code> attribut code> Code> code> Stanza Spécifie le destinataire du message. Si la ressource fait partie du destinataire, seulement que JID recevra le message. Si le destinataire est un jid à nu (utilisateur @ domain), les priorités entrent en jeu (voir ici A >): p>

  1. La ressource avec la priorité la plus élevée à tout moment sera celle qui reçoit des messages entrants. LI>
  2. Si deux ressources ou plus ont la même priorité, toutes les ressources ayant ladite priorité peuvent recevoir des messages entrants ou en fonction de la mise en œuvre du serveur, on peut recevoir en fonction des critères spécifiques au serveur. LI>
  3. Si toutes les ressources connectées ont une priorité négative, les messages entrants seront en file d'attente sur le côté serveur jusqu'à ce que l'une des ressources réinitialise la priorité pour être positive. LI> ol>

    Vous pouvez définir la priorité (un entier dans [-128, 127]) lorsque vous envoyez votre présence (voir le RFC pour une spécification complète) Par exemple: P>

    <presence>
      <status>Learning XMPP</status>
      <priority>1</priority>
    </presence>
    


2 commentaires

Le numéro 2 est inexact. Il peut livrer au tout tel que défini ou livrer à un destinataire en fonction de certains autres critères spécifiques de la mise en œuvre. Section 11.1 Stanzas entrante . Toujours une bonne réponse cependant.


@Robin Aha, c'était surtout hors de mémoire et bien sûr que vous avez raison. Amendement.



11
votes

Si vous souhaitez avoir la conversation entière, y compris les messages que vous envoyez de votre client à afficher sur une autre session, alors Les carbones sont la fonctionnalité que vous recherchez. J'ai Mise en œuvre ceci dans un plugin pour Prosody .

La partie client requise ne devrait pas être trop difficile à écrire, voici ici dans le verset Bibliothèque .


0 commentaires

4
votes

Faites une longue histoire courte!

Utilisation: xxx

et non: xxx

Le dernier paramètre Appelé ressource, et représente votre station que vous vous connectez de.

De cette façon, vous pouvez vous connecter avec le même nom d'utilisateur, mais toujours à partir de 2 périphériques.


0 commentaires

0
votes

Si vous activez des carbones: xep-0280: Carbons de message pendant que vous détectez plusieurs Connexion, XMPP Server enverra un message de carbone à vos autres sessions connectées sur différents périphériques xxx pré>

N'oubliez pas de l'activer pour toutes les sessions. Ainsi, les deux sessions recevront les messages d'envoi et de réception. Pour le cas de message de réception, si vous êtes activé en carbone, en présence n'effectuera pas. P>

Encore une fois, si vous souhaitez qu'un message ne soit pas copié en carbone, ajoutez code >, code> Inside Stanza P>

<private xmlns='urn:xmpp:carbons:2'/>
<no-copy xmlns='urn:xmpp:hints'/>


0 commentaires