PHP Jabber: se faccio il login e controllare i messaggi e scollegare, in testa gli altri utenti che verrà visualizzato come disconnesso

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

  •  21-08-2019
  •  | 
  •  

Domanda

Non so se quello che sto facendo è assolutamente corretto. Ma ecco qui:

  1. i login utente in videochat tramite interfaccia web-based
  2. l'utente viene informato gli aggiornamenti tramite Comet
  3. L'utente inserisce particolari che Vai a un file PHP che si collega inoltre a un server Jabber

Ora il problema è che quando l'utente vuole inviare un messaggio, è semplice, php correre in cui mi collego al server Jabber e inviare il messaggio. Il problema sorge quando sto aspettando un messaggio. Causa se faccio il login e controllare i messaggi e scollegare, in testa gli altri utenti vi mostrerò come disconnesso.

Mi sto avvicinando a questo problema in un modo sbagliato? Dovrei direttamente connettersi al server Jabber (tramite JavaScript) al posto di uno strato di PHP in mezzo? Come ricevere messaggi tramite PHP?

È stato utile?

Soluzione

Questo è un problema intrinseco (o caratteristica) con http - non ci sono connessioni durature (non proprio). hai bisogno di una soluzione alternativa, non esiste una soluzione reale.

si potrebbe fare con Java o Flash, ma che non è davvero bello (javascript 4TW!).

L'altra possibilità sarebbe quella di creare un client intermedio ciò si traduce connessioni tra il browser e il server web per le connessioni tra il server web e il server Jabber. disordinato, ma possibile.

o forse v'è un'API che aiuta con questo.

direttamente la connessione al server jabber tramite javascript
Ho dormito forse gli ultimi Ajax-invenzioni, ma per quanto ne so si può comunicare solo con l'host del file di origine-html viene da (ignorando Greasemonkey Il mondo). non domini diversi, senza porte diverse, punto. a meno che non si sta andando a insegnare al vostro server Jabber come servire il vostro chatpage-html al browser, questo otterrà problematico. inoltre, rimanere in contatto non anche il lavoro, perché ciò richiederebbe multistrato-risposte. quelli sono supportati solo da Mozilla, e questo è il motivo per cui il brutto anatroccolo COMET esiste anche, in primo luogo. cometa è di per sé una soluzione per evitare l'incapacità di tenere i collegamenti durante il trasferimento dei dati.

Altri suggerimenti

Non ho provato fuori, ma si potrebbe desiderare di guardare xmpphp . In secondo luogo, si potrebbe prendere in considerazione mantenere l'utente connesso al server XMPP (aka un server Jabber) per tutto il tempo in cui è registrato al tuo sito web. Probabilmente vogliono avere un timeout di qualche tipo nel caso in cui lasciano il vostro sito web e non tornano.

Per quanto riguarda se o non si dovrebbe collegare tramite JavaScript, non vedo il motivo per cui non si poteva. Vorrei suggerire che si va per qualsiasi sembra il più semplice per voi. Si potrebbe voler controllare Strophe , che ho sentito parlare bene di, per quel caso.

L'unica libreria XMPP che ho usato ampiamente anche se è paletta , ma che richiede utilizzando pitone e Kamaelia .

Quindi il problema, per quanto posso dire, è che quando l'utente Jabber all'altro capo del filo risponde. Il problema c'è, almeno in parte, è che l'utente sta rispondendo ad un altro utente sul server Jabber, ma si vuole lo script php di essere a conoscenza che questa risposta ha avuto luogo senza tenere la connessione aperta (che ha senso dal momento che lo script non è più in esecuzione, probabilmente).

Una possibilità, anche se uno davvero sciocco, è:

  • Avere uno script PHP che può mediare una connessione al server Jabber sia per la trasmissione e la ricezione per l'utente sulla pagina,

  • Con AJAX per inviare messaggi per l'utente (l'AJAX indicherebbe lo script precedente, lo script avrebbe inviato il messaggio.)

  • Avere un ciclo infinito Javascript che fa un rumore metallico lo stesso script mai 10 secondi o giù di lì, il check-in per vedere se ci sono messaggi. Se ci sono, che viene passato al client e l'uscita per l'utente.

Ci sono solo due problemi con quanto sopra:

1) Se l'utente non è collegato quando viene trasmesso il messaggio, sarà lo script php ancora vedere / ottenere il messaggio?

2) Un ciclo lato client che fa richieste Ajax ogni 3 secondi probabilmente sarebbe un salasso enorme.

Soluzione 2:

OpenFire server Jabber. Viene fornito con un client Web di chat integrato, ed ha un addon chiamato Fastpath, che ha lo scopo di gestire le chat basate su HTML sul lato client (come la funzione "Invia un'e-ora!" Su troppe pagine di supporto.)

Usiamo questo sul posto di lavoro ed è molto personalizzabile, può essere integrato con altri script (ad esempio, se si desidera uno script che riempie i dettagli utente dalla loro login, o aggiunge un po 'avatar personalizzato, o qualsiasi altra cosa), e esso (OpenFire) ha tonnellate di altre estensioni e add-on che, se questo non è ciò che si vuole, probabilmente hanno quello che stai cercando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top