Gestione delle priorità con Jabber, Google Talk e client multipli

by Stefano on 10 marzo 2010

Come molti di voi potranno pensare, una delle più interessanti applicazioni che la versione 3.0 di iPhone ha permesso di sviluppare oramai da qualche mese a questa parte è il Push Instant Messaging. In molti effettivamente affermano che l’Instant Messaging mobile non è niente di nuovo, e che gli SMS svolgono benissimo il loro sporco lavoro. Sinceramente non sono d’accordo, e ritengo che SMS ed IM non siano nemmeno lontanamente comparabili. Gli SMS sono messaggi brevi non progettati per conversazioni medio lunghe. Inoltre, anche se le reti mobili moderne sono ben progettate, non vi è alcuna garanzia sui tempi di consegna di un SMS, che potrebbe essere recapitato in pochi secondi ma anche in tre o quattro ore.

Uno dei problemi che si incontrano più spesso quando si utilizzano applicazioni di Instant Messaging è il problema delle priorità. Potrebbe infatti accadere che, mentre siete connessi con il vostro iPhone o Android, accendete il vostro laptop ed effettuate il login con il vostro Instant Messenger. A questo punto avete due connessioni aperte contemporaneamente: dove verranno inoltrati i messaggi istantanei che riceverete?

Client e Providers

Non tutti i sistemi di IM gestiscono connessioni multiple. Ad oggi, ho avuto modo di testare principalmente Jabber/XMPP e Google Talk, e in questo articolo affronterò questi protocolli. Inoltre, nel mio caso, ho scelto di usare i miei account XMPP e GT attraverso Adium sul Mac e Beejive sull’iPhone.

Grazie alla natura open di XMPP, la gestione delle priorità non è vincolata all’utilizzo di uno specifico client o provider, ed ogni client di IM che sia XMPP-compliant può tranquillamente gestire connessioni multiple. Quindi, dal momento che ci sono decine di client per qualsiasi piattaforma in grado di supportare le resource priorities di XMPP, potete benissimo scegliere quello che più vi aggrada.

Come funziona

XMPP è uno standard di IM aperto, adottato da molti provider. Google Talk è basato su una implementazione proprietaria di XMPP, per cui ne eredita diversi aspetti, ma allo stesso tempo ne uccide molti altri.

Un service provider XMPP generalmente fornisce una user-id nella forma user@server.tld. Questo viene chiamato JID (Jabber ID), ed è utilizzato per identificare univocamente ogni singolo account nella rete federata. Per esempio, se state utilizzando Google Talk, il vostro JID è username@gmail.com.

Ogni volta che effettuate il login presso un server Jabber/XMPP , il vostro client invierà al server il cosiddetto Resource Name. E’ possibile modificare il Resource Name semplicemente agendo sulle impostazioni del vostro client Jabber. Dal momento che XMPP permette l’instaurazione di differenti sessioni simultanee utilizzando lo stesso JID, il Resource Name viene utilizzato per identificare e differenziare i diversi device connessi al server con un determinato account.

Ad esempio, se il vostro Resource Name sul vostro laptop è laptop, uno dei vostri contatti potrà inviare un messaggio al client del vostro laptop utilizzando la combinazione JID/RN (username@gmail.com/laptop), anche se siete connessi nello stesso momento con molti dispositivi.

Assieme al Resource Name, è possibile assegnare ad ogni client (leggi, ad ogni Resource Name) una priority. La priorità viene usata per risolvere conflitti di consegna ogni volta che un messaggio viene inviato al vostro JID senza che venga specificato dal mittente uno specifico Resource Name.

Secondo il protocollo, la priorità è un numero intero tra 0 e 127. Diversamente da quanto avviene con gli ordini di priorità dei server DNS, in XMPP 0 è la priorità più bassa, 127 la più alta.

Per spiegare con un esempio, potete immaginare di essere connessi ad un generico servizio XMPP con il vostro iPhone (RN: mobile, PRIORITY: 1) e con il vostro client Adium su Mac (RN: LaptopStefano, PRIORITY: 3). Se un utente di Google Talk (o di un altro servizio XMPP) invia un messaggio al vostro username, questo verrà consegnato al vostro client Adium sul Mac, dal momento che ha una priorità più alta dell’iPhone. Una volta che spegnete il Mac e vi andate a guardare un bel film portandovi dietro il vostro iPhone, l’unico client connesso con il vostro account risulterà essere quello del vostro telefono, con priorità 1. Da questo momento in poi, tutti i messaggi verranno consegnati sul vostro iPhone, dal momento che non vi è altro client connesso con priorità più alte.

Bello! Ma…

Si, lo so, tutto molto bello. Sfortunatamente però, come ho detto prima, Google Talk è basato su una implementazione proprietaria di XMPP, e tutto questo magheggio appena descritto non viene gestito molto bene.

Primo: i server di Google generalmente modificano a muzzo i Resource Name, aggiungendovi una stringa esadecimale calcolata secondo qualche oscuro algoritmo. In questo modo, tutti i vantaggi legati alla possibilità di specificare i Resource Name vanno a morire.

Inoltre, i server di Google ignorano bellamente qualsiasi priorità venga specificata. Se siete connessi con più sessioni contemporanee, ogni nuovo IM che venga inviato al vostro account viene simultaneamente recapitato a tutti i client connessi, finchè uno di essi non invia un IM di risposta, e quindi la conversazione continua solo su quel device.

Lo so, brutto.

Cosa posso fare?

Se volete un buon account Jabber/XMPP con una corretta implementazione di XMPP, potete iscrivervi ad uno dei moltissimi (e gratuiti) provider XMPP. Personalmente, vi suggerisco il più classico Jabber.org. O potete sempre installarvi un serverino XMPP.

È importante sottolineare che tutti i provider XMPP pubblici (anche Google Talk) sono interconnessi, quindi potete sottoscrivere un account su Jabber.org e parlare tranquillamente con i vostri contatti che usano Google Talk, grazie alla natura federata del protocollo che provvederà a far comunicare il server del vostro provider con quello del vostro interlocutore, esattamente come avviene con le e-mail.

E voi? Cosa pensate dell’Instant Messaging in mobilità? Quale client usate e qual è il vostro provider?

Leave a Comment

{ 1 trackback }

Previous post:

Next post: