PHP Jabber: si je me connecte et vérifie les messages et déconnexion, les autres utilisateurs finissent j'apparaître comme déconnecté

StackOverflow https://stackoverflow.com/questions/847854

  •  21-08-2019
  •  | 
  •  

Question

Je ne suis pas sûr si ce que je fais est tout à fait correct. Mais va ici:

  1. Identifiants dans le chat via l'interface Web
  2. L'utilisateur est informé des mises à jour via Comet
  3. L'utilisateur saisit les détails qui goto un fichier PHP qui se connecte plus à un serveur Jabber

Maintenant, le problème est que lorsque l'utilisateur souhaite envoyer un message, il est simple, exécutez la commande php dans lequel je me connecte au serveur jabber et envoyer le message. Le problème se pose quand je suis en attente d'un message. Parce que si je me connecte et vérifier les messages et déconnexion, les autres utilisateurs finissent j'apparaître comme déconnecté.

Suis-je aborder ce problème d'une mauvaise façon? Dois-je connecter directement au serveur Jabber (via javascript) au lieu d'une couche de PHP entre les deux? Comment recevoir des messages via PHP?

Était-ce utile?

La solution

est un problème inhérent (ou fonction) avec http - il n'y a pas de liens durables (pas vraiment). vous avez besoin d'une solution de contournement, il n'y a pas de solution réelle.

vous pouvez le faire avec Java ou flash, mais ce n'est pas vraiment sympa (javascript 4tw!).

L'autre possibilité serait de créer un client intermédiaire ce qui se traduit par des connexions entre le navigateur et le serveur Web pour les connexions entre le serveur Web et le serveur Jabber. en désordre, mais possible.

ou peut-être il y a une API qui aide à ce sujet.

connecter directement au serveur jabber via javascript i peut-être dormi à travers les dernières ajax-inventions, mais autant que je sache, vous ne pouvez communiquer avec l'hôte du fichier source html provient de (en ignorant Greasemonkey et addons). pas de domaines différents, pas de ports différents, période. à moins que vous allez apprendre à votre serveur jabber comment servir votre chatpage-html au navigateur, cela se problématique. De plus, rester connecté ne fonctionne même pas, car cela nécessiterait multipart-réponses. ceux-ci sont pris en charge que par mozilla, et c'est pourquoi le vilain petit canard COMET existe même en premier lieu. comète elle-même est une solution de contournement pour éviter l'incapacité de maintenir des connexions pendant le transfert des données.

Autres conseils

Je ne l'ai pas essayé, mais vous pourriez vouloir regarder xmpphp . Deuxièmement, vous voudrez peut-être envisager de garder l'utilisateur connecté au serveur XMPP (alias un serveur Jabber) pour aussi longtemps qu'ils sont connectés à votre site Web. Vous voulez sans doute avoir un délai d'attente d'une sorte au cas où ils quittent votre site et ne reviennent pas.

Quant à savoir si vous devez vous connecter via JavaScript, je ne vois pas ou pas pourquoi vous ne pouviez pas. Je suggère que vous allez pour tout ce qui semble le plus simple pour vous. Vous pouvez consulter Strophe , que j'entends de bonnes choses, pour ce cas.

La bibliothèque ne XMPP que je l'ai largement utilisé mais est poupée fixe, mais qui nécessite en utilisant python et Kamaelia .

Donc, la question, pour autant que je peux dire, est que lorsque l'utilisateur Jabber sur l'autre extrémité répond. Le problème là-bas, au moins en partie, est que l'utilisateur répond à un autre utilisateur sur le serveur Jabber, mais vous voulez que le script php pour être conscient que cette réponse a eu lieu sans tenir la connexion ouverte (ce qui est logique puisque le script n'est en cours d'exécution plus, probablement).

Une option, mais une vraiment stupide, est:

  • Avoir un script php qui peut négocier une connexion au serveur Jabber pour l'envoi et la réception de l'utilisateur sur votre page,

  • Utilisez AJAX pour envoyer des messages pour l'utilisateur (AJAX citerais le script ci-dessus, le script enverrait le message.)

  • Avoir une boucle infinie Javascript qui cingle le même script jamais les 10 secondes, vérifier pour voir si des messages. S'il y a, ils sont transmis au client et de sortie à l'utilisateur.

Il n'y a que deux problèmes avec ce qui précède:

1) Si l'utilisateur n'est pas connecté lorsque le message est transmis, sera le script php encore voir / faire passer le message?

2) Une boucle de côté client qui effectue des requêtes Ajax toutes les 3 secondes serait probablement un drain énorme.

Solution 2:

OpenFire jabber serveur. Il est livré avec un client de messagerie instantanée Web intégré, et il a un addon appelé Fastpath, qui est destiné à gérer des conversations en HTML sur le côté client (comme la fonction « chat avec un agent maintenant! » Trop de pages de soutien.)

Nous utilisons ce lieu de travail et il est très personnalisable, peut être intégré avec d'autres scripts (par exemple, si vous voulez un script qui remplit les détails de l'utilisateur à partir de leur connexion, ou ajoute un certain avatar personnalisé, ou autre), et il (OpenFire) a des tonnes d'autres extensions et addons qui, si ce n'est pas ce que vous voulez, ils ont probablement ce que vous recherchez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top