Nozioni fondamentali sulla connettività di rete e le comunicazioniFlash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive Quando create applicazioni in Flash Player o AIR, spesso avete bisogno di accedere a risorse esterne all'applicazione. Ad esempio, potreste inviare una richiesta per un'immagine a un server Web Internet e ottenere in risposta i dati immagine. Oppure, potreste inviare oggetti serializzati avanti e indietro su una connessione socket con un server applicazione. Le API Flash Player e AIR forniscono diverse classi che consentono alle applicazioni di partecipare in questo scambio. Queste API supportano la connettività di rete basata su IP per protocolli quali UDP, TCP, HTTP, RTMP e RTMFP. Le classi seguenti possono essere utilizzate per inviare e ricevere dati su una rete:
Spesso, durante la creazione di un'applicazione Web è utile memorizzare informazioni persistenti sullo stato applicazione dell'utente. Le pagine e le applicazioni HTML utilizzano in genere cookie per questo scopo. In Flash Player, potete utilizzare la classe SharedObject per lo stesso scopo. Vedete Oggetti condivisi. (La classe SharedObject può essere utilizzata nelle applicazioni AIR, ma il numero di limitazioni è inferiore quando si salvano semplicemente i dati in un file normale.) Quando l'applicazione Flash Player o AIR deve comunicare con un'altra applicazione Flash Player o AIR sullo stesso computer, potete utilizzare la classe LocalConnection. Ad esempio, due (o più) file SWF sulla stessa pagina Web possono comunicare tra loro. Analogamente, un file SWF in esecuzione su una pagina Web può comunicare con un'applicazione AIR. Vedete Comunicazione con altre istanze di Flash Player e Adobe AIR. Quando dovete comunicare con altri processi non SWF sul computer locale, potete utilizzare la classe NativeProcess aggiunta in AIR 2. La classe NativeProcess consente all'applicazione AIR di avviare e comunicare con altre applicazioni. Vedete Comunicazione con processi nativi in AIR. Quando vi occorrono informazioni sull'ambiente di rete del computer su cui è in esecuzione un'applicazione AIR, potete utilizzare le classi seguenti:
Concetti e termini importantiL'elenco di riferimento seguente contiene termini importanti che vengono citati durante la programmazione del codice di rete e di comunicazione:
Interfacce di retePotete utilizzare l'oggetto NetworkInfo per rilevare le interfacce di rete hardware e software disponibili nell'applicazione. L'oggetto NetworkInfo è un oggetto singleton, non è necessario crearne uno. Invece, utilizzate la proprietà di classe statica, networkInfo, per accedere al singolo oggetto NetworkInfo. L'oggetto NetworkInfo invia inoltre un evento networkChange quando una delle interfacce disponibili cambia. Chiamate il metodo findInterfaces() per ottenere l'elenco degli oggetti NetworkInterface. Ogni oggetto NetworkInterface nell'elenco descrive una delle interfacce disponibili. L'oggetto NetworkInterface fornisce informazioni quali l'indirizzo IP, l'indirizzo hardware, l'MTU (maximum transmission unit)e se l'interfaccia è attiva. Il codice di esempio seguente traccia le proprietà NetworkInterface di ciascuna interfaccia sul computer client: package {
import flash.display.Sprite;
import flash.net.InterfaceAddress;
import flash.net.NetworkInfo;
import flash.net.NetworkInterface;
public class NetworkInformationExample extends Sprite
{
public function NetworkInformationExample()
{
var networkInfo:NetworkInfo = NetworkInfo.networkInfo;
var interfaces:Vector.<NetworkInterface> = networkInfo.findInterfaces();
if( interfaces != null )
{
trace( "Interface count: " + interfaces.length );
for each ( var interfaceObj:NetworkInterface in interfaces )
{
trace( "\nname: " + interfaceObj.name );
trace( "display name: " + interfaceObj.displayName );
trace( "mtu: " + interfaceObj.mtu );
trace( "active?: " + interfaceObj.active );
trace( "parent interface: " + interfaceObj.parent );
trace( "hardware address: " + interfaceObj.hardwareAddress );
if( interfaceObj.subInterfaces != null )
{
trace( "# subinterfaces: " + interfaceObj.subInterfaces.length );
}
trace("# addresses: " + interfaceObj.addresses.length );
for each ( var address:InterfaceAddress in interfaceObj.addresses )
{
trace( " type: " + address.ipVersion );
trace( " address: " + address.address );
trace( " broadcast: " + address.broadcast );
trace( " prefix length: " + address.prefixLength );
}
}
}
}
}
}
Per ulteriori informazioni, vedete: Modifiche della connettività di reteÈ possibile che la vostra applicazione AIR sia eseguita in ambienti caratterizzati da una connettività di rete incerta e mutevole. Per agevolare la gestione delle connessioni alle risorse online da parte di un'applicazione, Adobe AIR invia un evento modifica di rete ogni volta che una connessione di rete diventa disponibile o cessa di esserlo. L'oggetto NetworkInfo e l'oggetto NativeApplication dell'applicazione inviano entrambi l'evento networkChange. In risposta a questo evento, aggiungete un listener: NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE, onNetworkChange); E definite una funzione gestore eventi: function onNetworkChange(event:Event)
{
//Check resource availability
}
L'evento networkChange non segnala una modifica relativa a tutta l'attività della rete, ma solo che una singola connessione di rete è cambiata. AIR non tenta di interpretare il significato della modifica di rete. È possibile che un computer della rete disponga di svariate connessioni reali e virtuali, pertanto la perdita di una connessione non comporta necessariamente la perdita una risorsa. D'altro canto, neppure le nuove connessioni garantiscono una migliore disponibilità delle risorse. Talvolta una nuova connessione può persino bloccare l'accesso a risorse che in precedenza erano disponibili (è il caso, ad esempio, di una connessione a una rete privata virtuale o VPN). In genere un'applicazione ha un solo modo per scoprire se può o meno stabilire una connessione con una risorsa remota: tentare di connettersi. Il framework di monitoraggio dei servizi offre un metodo basato su eventi per rispondere alle modifiche nella connettività di rete per un host specifico. Nota: il framework di monitoraggio dei servizi determina se la risposta di un server a una richiesta è accettabile o meno. Una verifica corretta non garantisce piena connettività. I servizi Web scalabili usano spesso strumenti per la creazione di cache e di bilanciamento del carico che consentono di reindirizzare il traffico verso un cluster di server Web. In questa situazione, i provider di servizi offrono una diagnosi soltanto parziale della connettività di rete.
Monitoraggio dei serviziIl framework di monitoraggio dei servizi, che è indipendente dal framework AIR, risiede nel file aircore.swc. Per usare il framework, è necessario che il file aircore.swc sia incluso nel processo di creazione. Adobe® Flash® Builder include questa libreria automaticamente. La classe ServiceMonitor implementa il framework per il monitoraggio dei servizi di rete e costituisce una funzionalità di base per i monitor di servizi. Per impostazione predefinita, un'istanza della classe ServiceMonitor invia gli eventi riguardanti la connettività di rete. L'oggetto ServiceMonitor invia questi eventi quando viene creata l'istanza e ogni volta che il runtime rileva una modifica di rete. È inoltre possibile impostare la proprietà pollInterval di un'istanza ServiceMonitor in modo tale che la connettività di rete venga controllata a intervalli regolari, espressi in millisecondi, indipendentemente dagli eventi relativi alla connettività di rete generale. Un oggetto ServiceMonitor non controlla la connettività di rete finché non viene chiamato il metodo start(). URLMonitor, una sottoclasse della classe ServiceMonitor, rileva le modifiche della connettività HTTP per uno specifico oggetto URLRequest. SocketMonitor, anch'essa una sottoclasse della classe ServiceMonitor, rileva le modifiche della connettività con un host specifico su una porta specifica. Nota: nelle versioni precedenti a AIR 2, il framework di monitoraggio dei servizi era pubblicato nella libreria servicemonitor.swc. Questa libreria è ora sconsigliata. Utilizzate invece la libreria aircore.swc.
Flash CS4 e CS5 ProfessionalPer utilizzare queste classi in Adobe® Flash® CS4 o CS5 Professional:
Flash CS3 ProfessionalPer usare queste classi in Adobe® Flash® CS3 Professional, trascinate il componente ServiceMonitorShim dal pannello Componenti al pannello Libreria, quindi aggiungete la seguente istruzione import al codice ActionScript 3.0: import air.net.*; Monitoraggio HTTPLa classe URLMonitor determina se le richieste HTTP possono essere effettuate a un indirizzo specifico sulla porta 80 (la porta tradizionalmente usata per le comunicazioni HTTP). Nel codice seguente viene usata un'istanza della classe URLMonitor per rilevare le modifiche della connettività al sito Web Adobe: import air.net.URLMonitor;
import flash.net.URLRequest;
import flash.events.StatusEvent;
var monitor:URLMonitor;
monitor = new URLMonitor(new URLRequest('http://www.example.com'));
monitor.addEventListener(StatusEvent.STATUS, announceStatus);
monitor.start();
function announceStatus(e:StatusEvent):void {
trace("Status change. Current status: " + monitor.available);
}
Monitoraggio SocketLe applicazioni AIR possono usare anche le connessioni socket per la connettività di modello push. In genere, per motivi di sicurezza, i firewall e i router di rete limitano la comunicazione in rete sulle porte non autorizzate. Gli sviluppatori dovranno dunque considerare che gli utenti non sempre hanno la possibilità di effettuare connessioni socket. Nel codice seguente viene usata un'istanza della classe SocketMonitor per rilevare le modifiche della connettività per una connessione socket. La porta monitorata è 6667, una porta comune per IRC: import air.net.ServiceMonitor;
import flash.events.StatusEvent;
socketMonitor = new SocketMonitor('www.example.com',6667);
socketMonitor.addEventListener(StatusEvent.STATUS, socketStatusChange);
socketMonitor.start();
function announceStatus(e:StatusEvent):void {
trace("Status change. Current status: " + socketMonitor.available);
}
Se il server socket richiede una connessione protetta, potete utilizzare la classe SecureSocketMonitor anziché SocketMonitor. Record DNS (Domain Name System)Potete cercare record di risorse DNS utilizzando la classe DNSResolver. I record di risorse DNS forniscono informazioni come l'indirizzo IP di un nome di dominio e il nome di dominio di un indirizzo IP. Potete ricercare i tipi seguenti di record di risorse DNS:
Per ricercare un record, passate una stringa di query e l'oggetto classe che rappresenta il tipo di record al metodo lookup() dell'oggetto DNSResolver. La stringa di query da utilizzare dipende dal tipo di record:
Il codice di esempio seguente ricerca l'indirizzo IP dell'host “example.com”. package
{
import flash.display.Sprite;
import flash.events.DNSResolverEvent;
import flash.events.ErrorEvent;
import flash.net.dns.ARecord;
import flash.net.dns.DNSResolver;
public class DNSResolverExample extends Sprite
{
public function DNSResolverExample()
{
var resolver:DNSResolver = new DNSResolver();
resolver.addEventListener( DNSResolverEvent.LOOKUP, lookupComplete );
resolver.addEventListener( ErrorEvent.ERROR, lookupError );
resolver.lookup( "example.com.", ARecord );
}
private function lookupComplete( event:DNSResolverEvent ):void
{
trace( "Query string: " + event.host );
trace( "Record count: " + event.resourceRecords.length );
for each( var record:* in event.resourceRecords )
{
if( record is ARecord ) trace( record.address );
}
}
private function lookupError( error:ErrorEvent ):void
{
trace("Error: " + error.text );
}
}
}
Per ulteriori informazioni, vedete: |
|