Domanda

Abbiamo un sito e abbiamo sviluppato un sistema di chat per utilizzando strophe.js biblioteca e ejabberd del server XMPP. Usiamo attaccamento sessione che è stato avviato con PHP (utilizzando una libreria in-house). Quello che facciamo è ottenere il RID e SID dallo script PHP, quindi utilizzare l'attaccamento seduta di strofe. Il detto RID e SID è memorizzato su un biscotto e il valore RID sul cookie viene aggiornato ogni aggiornamento del RID su strophe.js.

Questo funziona bene, dopo l'accesso riceviamo lo stato di presenza di ciascuno dei nostri contatti. Il problema di questo è, quando si va a un'altra pagina del sito, e si attaccano con il detto RID (usiamo il valore incrementato prodotto da strofe) e SID, il server non avrebbe inviato informazioni sulla presenza dei contatti più in contrapposizione a quando collegato. Ciò ha causato la nostra area contatti appaia tutto invisibile anche se sono in linea. Avrebbero apparire solo online se (o il vostro contatto) logout sulla chat, quindi accedere nuovamente (dal momento che riceverà un aggiornamento di presenza dal server XMPP).

Ho scritto una soluzione in cui lo stato di presenza dei contatti viene salvato su un cookie (tutti i contatti online avranno i loro JID salvati sul cookie) quando una presenza viene ricevuto dal server. Questo viene controllato ogni caricamento della pagina, se il cookie è impostata, sarà letto, e tutti i JID sul cookie viene contrassegnato come on-line. Questo sta funzionando benissimo, ma ci potrebbero essere alcuni modi migliori per risolvere questo, utilizzando i comportamenti di default di XMPP.

È stato utile?

Soluzione

server XMPP inviare sonde di presenza a tutti i vostri contatti sul vostro conto quando si invia la propria presenza iniziale al server. Da allora in poi, si riceveranno solo i cambiamenti di stato di presenza dai contatti.

Se si perde lo stato di presenza dei contatti, è necessario inviare il proprio sonde presenza di ristabilire quello stato. Tuttavia, questo è probabilmente non è qualcosa che si desidera fare molto, e passando tutto lo stato presenza è probabilmente preferito nella maggior parte dei casi.

Si potrebbe provare a passare allo stato via XMPP. Ad esempio, è possibile utilizzare privata XML bagagli (XEP-0049), PubSub (XEP-0060), o PEP (XEP-0163).

Un'altra opzione invece di biscotti per passarlo lato client è quello di utilizzare un oggetto HTML5 SharedWorker per contenere lo stato.

Altri suggerimenti

I brividi a pensare delle proprietà di scala connessi con la conservazione di tutte la presenza hai appena ricevuto dal server al server di ammasso privato. L'ammasso privato è quasi sempre sostenuta per l'archiviazione a lungo termine piuttosto che in memoria, in modo che stai andando a macinare disco del server per la polvere.

Se si desidera memorizzare più Stato nel browser, e isolarsi dalla versione del browser, e si sta già utilizzando jQuery, quindi jStore è piuttosto dolce.

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